You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程恢复AG Grid状态?官方方案遇阻及替代实现

AG Grid:替代getState(),通过Column State实现状态持久化与恢复

我尝试用AG Grid的api.getState()获取网格状态并存储到数据库,希望能通过编程方式从存储的状态恢复网格状态。官方提供的方案需要完全重置网格并在onGridReady中重新获取数据,这种方式过于hacky,我照着尝试后也没能成功。想确认AG Grid是否有直接恢复Grid State的功能,还是必须将Grid State映射为Column State这类细分状态来实现恢复?

最终我改用Column State完成了需求,相关代码如下:

<AgGridReact ...
        onColumnRowGroupChanged={handleColumnRowGroupChanged}
        onColumnVisible={handleColumnVisibilityChange}
        onColumnPinned={handlePinningChange}
        onColumnResized={handleColumnSizingChange}
        onColumnMoved={handleColumnOrderChange}
/>

const handleApplyState = useCallback(
  ({ api, source }: { api: GridApi<SpPmProduct>; source: string }) => {
    if (
      source === 'viewportSizeFeature' ||
      source === 'api' ||
      source === 'gridInitializing' ||
      source === 'gridOptionsChanged'
    ) {
      return;
    }
    const columnState = api.getColumnState();
    setTableGridColumnState(columnState);
  },
  [setTableGridColumnState]
);

const handlePinningChange = useCallback(
  (params: ColumnPinnedEvent<SpPmProduct>) => {
    handleApplyState(params);
  },
  [handleApplyState]
);

const handleColumnVisibilityChange = useCallback(
  (params: ColumnVisibleEvent<SpPmProduct>) => {
    handleApplyState(params);
  },
  [handleApplyState]
);

const handleColumnSizingChange = useCallback(
  (params: ColumnResizedEvent<SpPmProduct>) => {
    if (params.finished) {
      handleApplyState(params);
    }
  },
  [handleApplyState]
);

const handleColumnOrderChange = useCallback(
  (params: ColumnMovedEvent<SpPmProduct>) => {
    if (params.finished) {
      handleApplyState(params);
    }
  },
  [handleApplyState]
);

const handleColumnRowGroupChanged = useCallback(
  (params: ColumnRowGroupChangedEvent<SpPmProduct>) => {
    handleApplyState(params);
  },
  [handleApplyState]
);

useDidUpdate(() => {
  if (tableGridColumnState) {
    gridRef?.current?.api?.applyColumnState({
      state: tableGridColumnState,
      applyOrder: true,
    });
  } else {
    gridRef?.current?.api?.resetColumnState();
  }
  // eslint-disable-next-line react-hooks/exhaustive-deps
}, [tableGridColumnState]); // this is strictly to apply column state when tableGridColumnState changes

内容的提问来源于stack exchange,提问作者iamaword

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:41:06