I am using Ag-grid react. and looking for getting current page number and then send request to server according to the current page value. The pagination component is also, a custom pagination component.
As you can see in the following code, when i define a function callback as value for onPaginationChanged, the function calls infinitely!. How can prevent this behaviour?.
"use strict";
import React, {
useCallback,
useMemo,
useRef,
useState,
StrictMode,
} from "react";
import { createRoot } from "react-dom/client";
import { AgGridReact } from "ag-grid-react";
import "ag-grid-community/styles/ag-grid.css";
import "ag-grid-community/styles/ag-theme-quartz.css";
import {
ColDef,
ColGroupDef,
GridApi,
GridOptions,
GridReadyEvent,
createGrid,
} from "ag-grid-community";
import { IOlympicData } from "./interfaces";
const GridExample = () => {
const containerStyle = useMemo(() => ({ width: "100%", height: "100%" }), []);
const gridStyle = useMemo(() => ({ height: "100%", width: "100%" }), []);
const [rowData, setRowData] = useState<IOlympicData[]>();
const [columnDefs, setColumnDefs] = useState<ColDef[]>([
{
field: "athlete",
minWidth: 170,
checkboxSelection: true,
headerCheckboxSelection: true,
},
{ field: "age" },
{ field: "country" },
{ field: "year" },
{ field: "date" },
{ field: "sport" },
{ field: "gold" },
{ field: "silver" },
{ field: "bronze" },
{ field: "total" },
]);
const defaultColDef = useMemo<ColDef>(() => {
return {
editable: true,
filter: true,
flex: 1,
minWidth: 100,
};
}, []);
const onGridReady = useCallback((params: GridReadyEvent) => {
fetch("https://www.ag-grid.com/example-assets/olympic-winners.json")
.then((resp) => resp.json())
.then((data: IOlympicData[]) => setRowData(data));
}, []);
const getUser = useCallback(() => {
console.log("Caaled");
fetch("https://www.ag-grid.com/example-assets/olympic-winners.json")
.then((resp) => resp.json())
.then((data: IOlympicData[]) => setRowData(data));
}, []);
return (
<div style={containerStyle}>
<div style={gridStyle} className={"ag-theme-quartz-dark"}>
<AgGridReact<IOlympicData>
rowData={rowData}
columnDefs={columnDefs}
defaultColDef={defaultColDef}
suppressRowClickSelection={true}
groupSelectsChildren={true}
rowSelection={"multiple"}
onPaginationChanged={getUser}
pagination={true}
onGridReady={onGridReady}
/>
</div>
</div>
);
};
const root = createRoot(document.getElementById("root")!);
root.render(
<StrictMode>
<GridExample />
</StrictMode>
);