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

AG Grid服务端行模型下如何禁用缓存并在切换页面时重新获取分组父行?

AG Grid服务端行模型下如何禁用缓存并在切换页面时重新获取分组父行?

看起来你遇到的问题我之前也帮人排查过——AG Grid的服务端行模型对根级分组父行的缓存逻辑确实和子行不一样,默认会把这些父行缓存起来,导致切换页面时只会重新请求子行,父行还在复用旧数据。我来给你一步步拆解解决思路和具体做法:

核心问题点

AG Grid默认认为**顶级分组节点(比如你说的"United States"、"China"这类父行)**是全局数据集的一部分,不会随分页切换自动清除缓存。但你的需求是每次切页都要从服务器拉取当前页的父行,所以必须主动干预缓存的清除逻辑。

具体解决步骤

1. 先收紧Grid的缓存配置

先把你的现有配置再优化下,把缓存的空间压缩到极致,避免残留:

rowModelType={'serverSide'}
pagination={true}
paginationPageSize={2}
cacheBlockSize={2}
maxBlocksInCache={1}
cacheOverflowSize={0} // 新增:彻底禁止缓存超出当前块的内容
serverSideStoreType="partial" // 只保留当前展开的节点数据

cacheOverflowSize={0}会让Grid完全不保留超出当前缓存块的任何数据,serverSideStoreType="partial"则会进一步限制只存储当前展开的节点,从配置层面减少缓存的可能。

2. 监听分页切换,主动清除所有缓存

这是解决父行不重新请求的关键!你需要在分页切换时,主动调用Grid的API清除所有服务端缓存,强制触发根级父行的重新请求。

在Grid组件中添加onPaginationChanged事件监听:

onPaginationChanged={(params) => {
  // 跳过组件初始化时的默认分页事件
  if (!params.api || params.api.getDisplayedRowCount() === 0) return;
  
  // 清除所有服务端行模型的缓存,包括根级分组父行
  params.api.purgeServerSideCache();
  
  // 强制刷新根级数据存储,触发父行的重新请求
  params.api.refreshServerSideStore({ 
    purge: true, // 确保彻底清除缓存
    route: [] // 空数组代表操作根级节点,也就是分组父行
  });
}}

这里的purgeServerSideCache()会把所有服务端缓存清干净,包括之前的父行数据;refreshServerSideStore则会主动触发根级节点的getRows请求,让服务器返回当前页的分组父行。

3. 服务端getRows接口要配合处理分页

最后,你的服务端getRows方法要能正确识别请求类型:

  • 当params.request.groupKeys是空数组时,说明是请求根级分组父行,要返回当前页的父行数据(比如第1页返回前2个国家,第2页返回接下来的2个)
  • 当params.request.groupKeys有值(比如["United States"]),说明是请求某个分组的子行,再返回对应的数据

这样一来,每次切换页面时,Grid会先拉取当前页的分组父行,等你展开某个父行时,再按需拉取对应的子行,完全符合你“无缓存、切页就重新拉父行”的需求。

验证效果

配置完后你可以测试下:

  • 切换页面时,看网络请求会触发根级的getRows请求,返回当前页的父分组
  • 展开父分组时,才会触发对应子行的请求
  • 所有数据都是实时从服务器拉的,没有缓存残留

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:10:15