Ag网格在动态添加行时不会导航到下一页



我使用的是映射到某个状态的React应用程序中使用的Ag网格。

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页似乎还没有准备好/创建好。

由于React生命周期的性质,在调用setState函数后,React状态不会立即流入ag网格组件。(这意味着在你调用函数时,ag网格还不知道它有多余的一行(

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

const [myGridData, setMyGridData] = useState([]);
useLayoutEffect(() => {
gridApi.paginationGoToPage(parseInt((gridApi.getDisplayedRowCount() / gridApi.paginationGetPageSize())) + 1);
}, [myGridData]);
<MyAgGrid
rowData={myGridData}
pagination
paginationPageSize={5}
{...props}
/>

最新更新