AgGrid 26.0.1服务端数据源持续触发重复请求且不显示加载行问题排查
我帮你分析下这个问题,看起来是升级到AgGrid 26后,新增的serverSideStoreType={ServerSideStoreType.Partial}配置和你的现有逻辑产生了冲突,导致Grid一直认为还有未加载的数据,从而重复发起请求。以下是几个关键的排查点和修复方案:
1. 修复successCallback的总行数传递错误
这是最可能的核心原因。在AgGrid的Server Side模式下,successCallback的第二个参数是总数据行数(不是当前请求的endRow),Grid会根据这个值判断是否还有更多数据需要加载。
看你的代码里,你传递的是request.endRow,这会让Grid误以为总共有request.endRow行数据,但如果后端返回的实际行数小于request.endRow - request.startRow,Grid就会一直重复请求同一个startRow,试图加载"剩余"的行。
修正代码:
// 原来的错误写法 successCallback(result.data.content, request.endRow); // 改成传递后端返回的真实总行数 successCallback(result.data.content, result.data.lastRow ?? 0);
同时,你代码里的lastPageLoadedBefore逻辑其实是多余的,甚至可能导致错误——手动修改endRow会打乱Grid的分页逻辑,应该直接让后端根据request.startRow和request.endRow返回对应的数据段,然后通过总行数告诉Grid是否到了最后一页。
2. 移除无效的infiniteInitialRowCount配置
infiniteInitialRowCount是给Infinite Row Model设计的参数,在Server Side Row Model下完全无效。AgGrid 26对配置的校验更严格,保留这个参数可能会让Grid误判数据总量,触发无限请求。直接从组件props中删除这个配置即可。
3. 调整缓存配置以适配Partial Store模式
你设置了rowBuffer={0},这个值在Partial Store模式下可能会导致Grid频繁请求数据——因为没有缓冲行,Grid会不断检查视图内的行是否已加载。建议改成默认值10,或者根据你的业务需求调整到合理数值。
另外,maxBlocksInCache的条件设置(shouldHideRow ? undefined : 100)也可能引发异常:当shouldHideRow为true时,maxBlocksInCache变为undefined,Partial Store的缓存机制可能出现混乱。建议保持这个值为固定的合理数值(比如100),不要动态切换。
4. 检查Grid初始化时的过滤操作
在onGridReady里你调用了api.setFilterModel({}),这个操作会触发filterChanged事件进而发起数据请求。虽然v24里没问题,但在v26的Partial Store模式下,可能和初始化请求冲突,导致重复请求。你可以暂时注释掉这行代码,看看问题是否消失;如果消失,再调整初始化逻辑(比如在Grid完全就绪后再清空过滤模型)。
按照上面的步骤修改后,应该就能解决无限请求的问题了。
内容的提问来源于stack exchange,提问作者zilijonas

