React AgGrid服务端数据源getRows仅触发一次、滚动加载失效问题
问题原因及修复方案
- 移除服务端模式下的
rowData参数
服务端行模型(rowModelType="serverSide")由AG Grid内部管理行数据,你同时传入rowData={rows}会导致Grid优先使用静态行数据,跳过服务端拉取逻辑,自然不会生成分页参数,request.startRow和request.endRow为undefined。直接删除AgGridReact组件上的rowData={rows}属性即可。
- 移除服务端模式下的
- 修正
successCallback的传值getRows成功回调的第二个参数需要传入数据集总行数,对应你接口返回的lastRow字段。你当前传入了当前页的endRow=10,会让Grid判定总数据量只有10条,加载完第一页后不会触发后续滚动加载,也不会出现滚动条。修改回调逻辑为:
- 修正
successCallback(result.content, result.lastRow ?? -1);
- 对齐分页大小配置
你配置的cacheBlockSize={100}代表Grid每次请求100条数据,但接口实际返回10条,会导致分页逻辑混乱。要么调整cacheBlockSize为10,要么通知后端按cacheBlockSize的配置返回对应数量的单页数据。
- 对齐分页大小配置
- 优化服务端数据源注册方式
你当前直接将字面量{ getRows }传给serverSideDatasource,React每次渲染都会生成新对象导致Grid重置数据源。建议用useMemo包裹数据源,或者在onGridReady钩子中调用api.setServerSideDatasource注册,逻辑更稳定:
- 优化服务端数据源注册方式
const serverSideDatasource = useMemo(() => ({ getRows }), [onRowsFetch]); // 然后将这个变量传给AgGridReact的serverSideDatasource属性
内容的提问来源于stack exchange,提问作者zilijonas
相关产品推荐
相关产品推荐

