如何通过编程恢复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
相关产品推荐
相关产品推荐

