Reactjs 调用ag grid react';s组件';来自cellrenderer组件的s方法
我有一个名为Reactjs 调用ag grid react';s组件';来自cellrenderer组件的s方法,reactjs,react-hooks,ag-grid-react,react-functional-component,Reactjs,React Hooks,Ag Grid React,React Functional Component,我有一个名为GenericGrid import React, { useState } from "react"; import { AgGridReact } from "ag-grid-react"; const GenericGrid = props => { const [visible, setVisible] = useState(false); const gridApi = useRef(); const onGridReady = params =&g
GenericGrid
import React, { useState } from "react";
import { AgGridReact } from "ag-grid-react";
const GenericGrid = props => {
const [visible, setVisible] = useState(false);
const gridApi = useRef();
const onGridReady = params => {
const { defaultFilter } = props;
gridApi.current = params.api;
const datasource = getServerDataSource(
gridApi.current,
{
size: AppConstants.PAGE_SIZE,
url: baseUrl,
defaultFilter
}
);
gridApi.current.setServerSideDatasource(datasource);
};
... // < == other methods omitted for brevity
const onAddNew = () => setVisible(true);
return (
<>
{!visible && (
<div className="ag-theme-material gridSize">
<AgGridReact
reactNext={true}
onCellValueChanged={onCellValueChanged}
onGridReady={onGridReady}
columnDefs={columnDefs}
pagination={true}
context={GenericGrid} // <== passed the component in context
onSelectionChanged={onRowSelect}
{...props.options}
></AgGridReact>
</div>
)}
{visible &&
clonedElementWithMoreProps(addNewComponent, {
visible,
onHide: () => setVisible(false),
dialogBtnLoading: createNewProgress,
onSubmit: create
})}
</>
);
}
export default GenericGrid;
现在,单击最后一列中的按钮,我想调用函数onAddNew
,如果可能的话,甚至可以直接调用setValue
,在GenericGrid
组件中声明
根据官方文档,这适用于基于
类
的组件,其中上下文是这样传递的:context={componentParent:this}
。但由于我的组件是功能组件,我直接在上下文中传递了GenericGrid
,假设它可以工作,但它不能工作。您是否检查cellRenderer而不是CellRenderFramework?也许是吧problem@mansourlotfi不,它不适用于cellRenderer。我在父级中声明了一个函数,然后将上下文设置为:const context={componentParent:(props)=>foo(props)};我在渲染器(未显示)中得到一个运行时错误,即foo不是函数。我正在调查这个链接:看看这是否解决了这个问题。它的关键是使用一个useRef钩子
if (field.name === "ViewDetails") {
return {
field: field.name,
colId: field.name,
headerName: field.displayName,
sortable: false,
cellRendererFramework: params => {
console.log("params.context", params.context); // <== prints the definition of 'GenericGrid'
console.log('params.context.onAddNew', params.context.onAddNew) // <== but this prints undefined
return (
<button className="btn btn-sm p-0 btn-link text-cm-primary"
onClick={params.context.onAddNew}
>
View Details
</button>
);
}
};
}