使用 ag 网格反应功能组件无法通过上下文调用父函数
react functional component with ag grid cannot call parent function via context
我正在使用 ag-grid-react 和 ag-grid-community 版本 22.1.1。我的应用程序是使用功能组件和挂钩编写的。我有一个 cellrenderer 组件,它试图使用找到的示例 here 在父组件中调用处理程序。这是ag-grid中的错误吗?在我学习 React 的过程中,我已经在这个应用程序上工作了一年多,这是我最后一个主要障碍,所以任何帮助或获得帮助的地方都将不胜感激。
单元格渲染器组件
import React from 'react';
import Button from '../../button/button';
const RowButtonRenderer = props => {
const editClickHandler = (props) => {
let d = props.data;
console.log(d);
props.context.foo({d});
//props.editClicked(props);
}
const deleteClickHandler = (props) => {
props.deleteClicked(props);
}
return (<span>
<Button classname={'rowbuttons'} onClick={() => { editClickHandler(props) }} caption={'Edit'} />
<Button classname={'rowbuttons'} onClick={() => { deleteClickHandler(props) }} caption={'Delete'} />
</span>);
};
export default RowButtonRenderer;
父组件
function Checking() {
function foo(props) {
let toggle = displayModal
setNewData(props);
setModalDisplay(!toggle);
}
const context = {componentParent: (props) => foo(props)};
const gridOptions = (params) => {
if (params.node.rowIndex % 2 === 0) {
return { background: "#ACC0C6" };
}
};
const frameworkComponents = {
rowButtonRenderer: RowButtonRenderer,
};
.
.
.
return (
<>
<AgGridReact
getRowStyle={gridOptions}
frameworkComponents={frameworkComponents}
context = {context}
columnDefs={columnDefinitions}
rowData={rowData}
headerHeight="50"
rowClass="gridFont"
></AgGridReact>
</>
);
}
当点击某行的编辑按钮时,调试器说有一个函数。
虽然收到此错误:
您将在此代码段中传递 context
对象:
const context = {componentParent: (props) => foo(props)};
...
<AgGridReact
context={context}
{...}
></AgGridReact>
在你的单元格渲染器中你称之为
props.context.foo({d});
虽然应该是这样
props.context.componentParent({d});
您也可以直接分配您的回调,因为它接收相同的参数并且returns相同的结果(如果有)
function foo(props) {
let toggle = displayModal
setNewData(props);
setModalDisplay(!toggle);
}
const context = {componentParent: foo};
您还可以在分配对象时使用 ES6 中的 shorthand 语法 属性
function componentParent(props) {
let toggle = displayModal
setNewData(props);
setModalDisplay(!toggle);
}
const context = {componentParent};
现场演示
我正在使用 ag-grid-react 和 ag-grid-community 版本 22.1.1。我的应用程序是使用功能组件和挂钩编写的。我有一个 cellrenderer 组件,它试图使用找到的示例 here 在父组件中调用处理程序。这是ag-grid中的错误吗?在我学习 React 的过程中,我已经在这个应用程序上工作了一年多,这是我最后一个主要障碍,所以任何帮助或获得帮助的地方都将不胜感激。
单元格渲染器组件
import React from 'react';
import Button from '../../button/button';
const RowButtonRenderer = props => {
const editClickHandler = (props) => {
let d = props.data;
console.log(d);
props.context.foo({d});
//props.editClicked(props);
}
const deleteClickHandler = (props) => {
props.deleteClicked(props);
}
return (<span>
<Button classname={'rowbuttons'} onClick={() => { editClickHandler(props) }} caption={'Edit'} />
<Button classname={'rowbuttons'} onClick={() => { deleteClickHandler(props) }} caption={'Delete'} />
</span>);
};
export default RowButtonRenderer;
父组件
function Checking() {
function foo(props) {
let toggle = displayModal
setNewData(props);
setModalDisplay(!toggle);
}
const context = {componentParent: (props) => foo(props)};
const gridOptions = (params) => {
if (params.node.rowIndex % 2 === 0) {
return { background: "#ACC0C6" };
}
};
const frameworkComponents = {
rowButtonRenderer: RowButtonRenderer,
};
.
.
.
return (
<>
<AgGridReact
getRowStyle={gridOptions}
frameworkComponents={frameworkComponents}
context = {context}
columnDefs={columnDefinitions}
rowData={rowData}
headerHeight="50"
rowClass="gridFont"
></AgGridReact>
</>
);
}
当点击某行的编辑按钮时,调试器说有一个函数。
虽然收到此错误:
您将在此代码段中传递 context
对象:
const context = {componentParent: (props) => foo(props)};
...
<AgGridReact
context={context}
{...}
></AgGridReact>
在你的单元格渲染器中你称之为
props.context.foo({d});
虽然应该是这样
props.context.componentParent({d});
您也可以直接分配您的回调,因为它接收相同的参数并且returns相同的结果(如果有)
function foo(props) {
let toggle = displayModal
setNewData(props);
setModalDisplay(!toggle);
}
const context = {componentParent: foo};
您还可以在分配对象时使用 ES6 中的 shorthand 语法 属性
function componentParent(props) {
let toggle = displayModal
setNewData(props);
setModalDisplay(!toggle);
}
const context = {componentParent};