当 React AgGrid 中的数据更改时更改状态栏组件

时间:2021-07-20 08:39:04

标签: javascript reactjs ecmascript-6 ag-grid-react

当道具更改时,我需要更改我在自定义状态栏中显示的值。 假设我得到了:

const CustomGrid = ({
   data, lastUpdate, framweworkComponents, columns
}) => {

  const [gridApi, setGridApi] = useState(null);
  const [gridColumnApi, setGridColumnApi] = useState(null);
  const [gridParams, setGridParams] = useState(null);

  const onGridReady = (params) => {
     setGridApi(params.api);
     setGridColumnApi(params.columnApi);
     setGridParams(params);
  }
 };

  
  const renderLastUpdateStatusBar = () => (
      <div>
         {lastUpdate}
      </div>
  );

  return(
    <div className={theme || 'ag-theme-balham'} style={style}>
      <AgGridReact
        modules={AllModules}
        onGridReady={onGridReady}
        columnDefs={columns}
        rowData={data}
        defaultColDef={defaultColDef || {
          resizable: true,
          menuTabs: [],
        }}
        frameworkComponents={{
          ...frameworkComponents,
          lastUpdateStatusBarComponent: renderLastUpdateStatusBar,
        }}
        statusBar={{
          statusPanels: [
            {
              statusPanel: 'lastUpdateStatusBarComponent',
              key: 'lastUpdateStatusBarKey',
              align: 'left',
            },
          ],
        }
      />
    </div>

 )
}

当“lastUpdate”更改时,它会正确传递给 CustomGrid 组件,但状态栏不会重新呈现,因此我永远看到第一个值。 我的目标是在每次“lastUpdate”更改时更新状态栏。我尝试创建一个包含我的框架组件的状态,并在 lastUpdate 更改时将其设置在 useEffect 中,然后将此状态放在 agGrid 中的 frameworkComponents prop 中,但它不起作用:

  const [frameworkC, setFrameworkC] = useState(null);

  useEffect(() => {
    setFrameworkC({
      ...frameworkComponents,
      lastUpdateStatusBarComponent: renderLastUpdateStatusBar,
    })
  }, [lastUpdate]);

  ...
  <AgGridReact
     ...
     frameworkComponents={frameworkC}
     ...
  >

我也尝试在 onGridReady 函数中设置此状态,结果相同。 我也试过在 useState 中调用 api.redrawRows(gridParams),没办法。

是否有一些 API 可以用来更新状态栏组件?或者有什么办法?

1 个答案:

答案 0 :(得分:1)

需要为要重新渲染的组件添加key

 <AgGridReact
        key={lastUpdate}
        modules={AllModules}
        onGridReady={onGridReady}
        columnDefs={columns}
        rowData={data}
        defaultColDef={defaultColDef || {
          resizable: true,
          menuTabs: [],
        }}
        frameworkComponents={{
          ...frameworkComponents,
          lastUpdateStatusBarComponent: renderLastUpdateStatusBar,
        }}
        statusBar={{
          statusPanels: [
            {
              statusPanel: 'lastUpdateStatusBarComponent',
              key: 'lastUpdateStatusBarKey',
              align: 'left',
            },
          ],
        }
      />
相关问题