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

React中Ag-Grid动态添加行后无法自动跳转对应分页问题

React中Ag-Grid添加行后分页跳转异常的解决方法

问题原因

核心问题是React的setState是异步操作:调用setMyGridData后,网格数据状态不会立刻更新,此时gridApi.getDisplayedRowCount()返回的还是旧行数(添加第6行前是5),导致判断条件gridApi.getDisplayedRowCount() >= 5不成立,无法触发分页跳转。而添加第7行时,网格已经完成第6行的渲染并更新了行数统计,此时条件满足,跳转逻辑正常执行。

解决方案

方案1:用useEffect监听数据变化

通过useEffect监听myGridData的更新,等状态同步、网格完成渲染后,再判断是否需要跳转到最后一页:

import { useState, useEffect } from 'react';

const [myGridData, setMyGridData] = useState([]);
let gridApi = null;

// 保存gridApi引用
const onGridReady = params => {
  gridApi = params.api;
};

// 监听数据变化处理分页跳转
useEffect(() => {
  if (!gridApi) return;
  
  const totalRows = gridApi.getDisplayedRowCount();
  const pageSize = gridApi.paginationGetPageSize();
  // Ag-Grid页码从0开始,计算目标页码
  const targetPage = Math.ceil(totalRows / pageSize) - 1;
  
  // 仅当总页数超过当前页时跳转
  if (totalRows > pageSize && gridApi.paginationGetCurrentPage() !== targetPage) {
    gridApi.paginationGoToPage(targetPage);
  }
}, [myGridData]);

// 表单提交逻辑
const handleFormSubmit = () => {
  setMyGridData(current => [...current, newRowData]);
};

// 网格组件渲染
<MyAgGrid
  rowData={myGridData}
  pagination
  paginationPageSize={5}
  onGridReady={onGridReady}
  {...props}
/>

方案2:利用Ag-Grid的rowData变化事件

直接通过Ag-Grid提供的onRowDataChanged事件,在数据更新后触发跳转逻辑:

const [myGridData, setMyGridData] = useState([]);
let gridApi = null;

const onGridReady = params => {
  gridApi = params.api;
};

const handleRowDataChanged = () => {
  if (!gridApi) return;
  
  const totalRows = gridApi.getDisplayedRowCount();
  const pageSize = gridApi.paginationGetPageSize();
  const targetPage = Math.ceil(totalRows / pageSize) - 1;
  
  if (totalRows > pageSize && gridApi.paginationGetCurrentPage() !== targetPage) {
    gridApi.paginationGoToPage(targetPage);
  }
};

// 表单提交逻辑
const handleFormSubmit = () => {
  setMyGridData(current => [...current, newRowData]);
};

// 网格组件渲染
<MyAgGrid
  rowData={myGridData}
  pagination
  paginationPageSize={5}
  onGridReady={onGridReady}
  onRowDataChanged={handleRowDataChanged}
  {...props}
/>

两种方案都能确保在网格数据完全更新后再计算页码,解决添加第6行时跳转失效的问题。

内容的提问来源于stack exchange,提问作者copenndthagen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:27:11