【问题标题】:Ag-Grid does not navigate to next page on adding row dynamicallyAg-Grid 在动态添加行时不会导航到下一页
【发布时间】:2022-10-14 07:27:57
【问题描述】:

我正在使用在我的 React 应用程序中使用的 Ag-grid 映射到某个状态。

const [myGridData, setMyGridData] = useState([]);

<MyAgGrid
    rowData={myGridData}
    pagination
    paginationPageSize={5}
    {...props}
/>

现在,我有一个表单,它接受用户输入并向网格动态添加一个新行。

因此,在保存此表单时,将调用以下代码

setMyGridData(current => [...current, newRowData]);
if (gridApi && gridApi.getDisplayedRowCount() >= gridApi.paginationGetPageSize()) {
    gridApi.paginationGoToPage(parseInt((gridApi.getDisplayedRowCount() / gridApi.paginationGetPageSize())) + 1);
}

页面大小设置为 5。因此,当我保存第 6 条记录时,我希望网格以编程方式导航到第 2 页,以便用户在网格中看到新记录。

但是在这里,虽然网格确实添加了第 6 行,但它没有导航到第 2 页,我必须手动导航才能看到第 6 条记录。但是,如果我在第 1 页并添加下一条记录(即第 7 行),它会导航到第 2 页。

因此,对于第 6 条记录,第 2 页似乎尚未准备好/创建。

【问题讨论】:

  • 你为什么不尝试按最新日期排序?所以用户可以在第 1 页看到新数据
  • 是的,这是可以做到的......但我并没有真正捕捉到在这种情况下添加的日期......所以一旦达到页面限制,就需要以编程方式分页
  • 检查 ag-grid Custom Paging 部分。添加新行时,尝试使用api.paginationGoToPage(4) 更改页码
  • 是的,我正在使用 paginationGoToPage ,但由于某种原因,它似乎在我提到的场景中不起作用

标签: javascript ag-grid ag-grid-react


【解决方案1】:

由于反应生命周期的性质,反应状态不会在调用 setState 函数后立即流入 ag-grid 组件。 (这意味着 ag-grid 在您调用该函数时还不知道它有额外的行)

您可以跳过反应生命周期,而是使用 api.setRowData 将行数据直接设置到网格中,但是更倾向于反应生命周期的方法是使用如下效果:

const [myGridData, setMyGridData] = useState([]);

useLayoutEffect(() => {
    gridApi.paginationGoToPage(parseInt((gridApi.getDisplayedRowCount() / gridApi.paginationGetPageSize())) + 1);
}, [myGridData]);

<MyAgGrid
    rowData={myGridData}
    pagination
    paginationPageSize={5}
    {...props}
/>

【讨论】:

  • 非常感谢...实际上我之前曾尝试过 useEffect 但它没有用...我现在尝试过 useLayoutEffect 但这也不起作用....另外我更喜欢通过 React 生命周期并且会理想情况下要避免直接调用 setRowData
猜你喜欢
  • 2021-11-15
  • 2019-03-01
  • 2020-03-21
  • 2019-03-28
  • 2019-03-06
  • 2019-08-11
  • 2020-11-25
  • 2020-08-20
  • 2016-11-25
相关资源
最近更新 更多