如何更新 Ag Grid 状态栏自定义组件中的道具
How to update props in Ag Grid status bar custom component
我正在开发一个基本的 Ag Grid React 应用程序,我向网格添加了一个自定义状态栏组件,using their docs。我的目标是在将过滤器应用于网格时更新状态栏中的“总行数”项目,但是我无法更改状态栏中的值。状态栏组件使用继承自 Grid 的状态变量作为 prop,但是当 prop 发生变化时,状态栏不会重新渲染以反映这一点。
Here's a demo 这表明即使传递给状态栏组件的 prop 发生变化,也没有任何反应。您可以通过单击按钮进行测试,控制台将显示“总计”变量递增,但状态栏保持不变。
相关代码片段:
import React, { useState } from 'react';
import { render } from 'react-dom';
import { AgGridColumn, AgGridReact } from 'ag-grid-react';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
const CustomStatusBar = props => {
return (
<div className="ag-status-bar-center">
<div className="ag-status-name-value ag-status-panel ag-status-panel-total-row-count">
<span className="label">Total Rows</span>:
<span className="ag-status-name-value-value">{props.total}</span>
</div>
</div>
);
};
const App = () => {
const rowData = [
{ make: 'Toyota', model: 'Celica', price: 35000 },
{ make: 'Ford', model: 'Mondeo', price: 32000 },
{ make: 'Porsche', model: 'Boxter', price: 72000 }
];
const [total, setTotal] = useState(3);
return (
<div className="ag-theme-alpine" style={{ height: 400, width: 600 }}>
<AgGridReact
rowData={rowData}
frameworkComponents={{
customStatusBar: CustomStatusBar
}}
statusBar={{
statusPanels: [
{
statusPanel: 'customStatusBar',
align: 'center',
statusPanelParams: { total: total }
}
]
}}
>
<AgGridColumn field="make" />
<AgGridColumn field="model" />
<AgGridColumn field="price" />
</AgGridReact>
<button
onClick={() => {
setTotal(prevTotal => {
console.log(prevTotal);
return prevTotal + 1;
});
}}
>
Click me
</button>
</div>
);
};
render(<App />, document.getElementById('root'));
而不是在 statusPanelParams
中传递 total
。我建议在自定义状态栏上定义一个 getter/setter 辅助方法,并在需要时传入 total
值,以便您可以更新它。
您可以这样获取状态栏实例:
// example - get status bar component
const statusBarComponent = gridOptions.api.getStatusPanel('statusBarCompKey');
if (statusBarComponent) {
componentInstance = statusBarComponent.getFrameworkComponentInstance();
}
如果你定义了一个方法,例如updateTotal
在状态栏上,可以这样调用:
componentInstance.updateTotal(total)
有关详细信息,请参阅此示例:https://www.ag-grid.com/react-data-grid/component-status-bar/#accessing-status-bar-panel-instances
我正在开发一个基本的 Ag Grid React 应用程序,我向网格添加了一个自定义状态栏组件,using their docs。我的目标是在将过滤器应用于网格时更新状态栏中的“总行数”项目,但是我无法更改状态栏中的值。状态栏组件使用继承自 Grid 的状态变量作为 prop,但是当 prop 发生变化时,状态栏不会重新渲染以反映这一点。
Here's a demo 这表明即使传递给状态栏组件的 prop 发生变化,也没有任何反应。您可以通过单击按钮进行测试,控制台将显示“总计”变量递增,但状态栏保持不变。
相关代码片段:
import React, { useState } from 'react';
import { render } from 'react-dom';
import { AgGridColumn, AgGridReact } from 'ag-grid-react';
import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
const CustomStatusBar = props => {
return (
<div className="ag-status-bar-center">
<div className="ag-status-name-value ag-status-panel ag-status-panel-total-row-count">
<span className="label">Total Rows</span>:
<span className="ag-status-name-value-value">{props.total}</span>
</div>
</div>
);
};
const App = () => {
const rowData = [
{ make: 'Toyota', model: 'Celica', price: 35000 },
{ make: 'Ford', model: 'Mondeo', price: 32000 },
{ make: 'Porsche', model: 'Boxter', price: 72000 }
];
const [total, setTotal] = useState(3);
return (
<div className="ag-theme-alpine" style={{ height: 400, width: 600 }}>
<AgGridReact
rowData={rowData}
frameworkComponents={{
customStatusBar: CustomStatusBar
}}
statusBar={{
statusPanels: [
{
statusPanel: 'customStatusBar',
align: 'center',
statusPanelParams: { total: total }
}
]
}}
>
<AgGridColumn field="make" />
<AgGridColumn field="model" />
<AgGridColumn field="price" />
</AgGridReact>
<button
onClick={() => {
setTotal(prevTotal => {
console.log(prevTotal);
return prevTotal + 1;
});
}}
>
Click me
</button>
</div>
);
};
render(<App />, document.getElementById('root'));
而不是在 statusPanelParams
中传递 total
。我建议在自定义状态栏上定义一个 getter/setter 辅助方法,并在需要时传入 total
值,以便您可以更新它。
您可以这样获取状态栏实例:
// example - get status bar component
const statusBarComponent = gridOptions.api.getStatusPanel('statusBarCompKey');
if (statusBarComponent) {
componentInstance = statusBarComponent.getFrameworkComponentInstance();
}
如果你定义了一个方法,例如updateTotal
在状态栏上,可以这样调用:
componentInstance.updateTotal(total)
有关详细信息,请参阅此示例:https://www.ag-grid.com/react-data-grid/component-status-bar/#accessing-status-bar-panel-instances