AG-Grid 表头缓存(列状态)说明

影响范围:steelTradeAggrid 组件(所有使用 menu-name 的表格页面) | 页面无需改动

目录

一、变更内容

steelTradeAggrid 的列状态(列宽 / 显隐 / 顺序 / 冻结)本地缓存逻辑做了加固:

# 变更点 说明
1 列结构变更时自动清理缓存 缓存指纹与业务字段集合改为递归提取(支持多级嵌套表头),新增列、删除列、改表头名都会判定缓存失效并重置为默认列
2 拖拽列顺序可正常记忆 拖拽只改变运行时列状态、不改变业务字段,不再被误判为「列结构变更」而重置
3 恢复时不再回放排序 缓存只回放列宽 / 显隐 / 顺序 / 冻结,不回放排序,避免与首屏渲染冲突
4 恢复时机后移 列状态恢复到首屏渲染之后执行,避免 cannot get grid to draw rows 类重入报错

恢复列状态决策流程

进入页面 / 切换 Tab
▼
首屏渲染完成(宏任务)
▼
读取本地缓存 columnState
▼
业务字段集合一致?
指纹一致?
▼
否 —— 列结构已变更
清理脏缓存
resetColumnState() 重置默认列
是 —— 列结构未变
回放列宽 / 显隐 / 顺序 / 冻结
(不含排序)
图 1 列状态恢复判定流程(CSS 模拟图)

二、缓存失效规则

场景 是否清理缓存 说明
新增业务列 清理 字段集合不一致
删除业务列 清理 字段集合不一致
修改表头名称 清理 指纹变化
拖拽列顺序 保留 业务字段未变,按新顺序记忆
调整列宽 保留 同上
隐藏 / 显示列 保留 同上
冻结 / 解冻列 保留 同上

三、升级影响

升级后首次进入页面,会重置一次表头自定义(含列宽、显隐、顺序),之后恢复正常记忆。

原因:指纹算法升级,旧缓存无法匹配,按规则清理一次,属预期行为。

后续版本若增删列或改表头名,同样会重置一次,属预期行为。

四、页面接入

无需任何改动,组件内部自动生效。