React AgGrid 服务器端数据源 getRows 仅触发一次,滚动不起作用
React AgGrid Server Side Datasource getRows fires only once, scroll not working
我使用 AgGridReact 组件创建了 AgGrid,使用文档中的示例设置服务器端数据源,但不知何故无限滚动不起作用。 getRows 函数仅在初始渲染时调用,网格上不显示滚动条。
import { AgGridReact } from '@ag-grid-community/react';
import {
AllModules,
ColumnApi,
GridReadyEvent,
IServerSideGetRowsParams,
ModelUpdatedEvent,
GridApi,
ColDef,
ToolPanelVisibleChangedEvent,
} from '@ag-grid-enterprise/all-modules';
export const DataGrid = <T extends unknown>({ rows, columns, onRowsFetch }: React.PropsWithChildren<Props<T>>) => {
const gridApi = useRef<GridApi>();
const gridColumnApi = useRef<ColumnApi>();
return (
<Box height="800px" width="100%" boxSizing="border-box" className="ag-theme-material">
<AgGridReact
modules={AllModules}
popupParent={document.body}
defaultColDef={defaultColDef}
headerHeight={90}
rowData={rows}
rowModelType={onRowsFetch ? 'serverSide' : 'clientSide'}
serverSideDatasource={{ getRows }}
cacheBlockSize={100}
blockLoadDebounceMillis={500}
maxBlocksInCache={100}
suppressContextMenu
colResizeDefault="shift"
columnDefs={columns as ColDef[]}
columnTypes={columnTypes.reduce((ac, a) => ({ ...ac, [a]: {} }), {})}
onGridReady={onGridReady}
onModelUpdated={resizeColumns}
onGridSizeChanged={resizeColumns}
onToolPanelVisibleChanged={resizeColumns}
suppressMovableColumns
suppressColumnMoveAnimation
sideBar={sideBarDef}
suppressMenuHide
alwaysShowVerticalScroll
/>
</Box>
);
function onGridReady({ api, columnApi }: GridReadyEvent) {
gridApi.current = api;
gridColumnApi.current = columnApi;
api.sizeColumnsToFit();
api.setFilterModel({});
}
function resizeColumns({ api }: ModelUpdatedEvent | ToolPanelVisibleChangedEvent) {
api.sizeColumnsToFit();
}
async function getRows({ request, successCallback, failCallback }: IServerSideGetRowsParams) {
if (!onRowsFetch) {
return;
}
try {
const result = await onRowsFetch({
startRow: request.startRow,
endRow: request.endRow,
sort: parseSortModel(request.sortModel),
filter: parseFilterModel(request.filterModel),
});
successCallback(result.content, result.endRow ?? -1);
} catch (error) {
failCallback();
throw error;
}
}
};
对 api 的请求不包括 startRow 和 endRow 参数(getRows 函数的 params
参数的属性 request.startRow 和 request.endRow 不知何故未定义)。
但是,api 请求仍然 returns 具有以下响应:
{
content: [...rowData],
endRow: 10,
lastRow: 474,
startRow: 0,
}
我在这里错过了什么?
显然,代码没有问题。问题出在 ag-grid 软件包的版本中。我已将其从 v25.3
降级为 v24.1
,现在一切正常。
我使用 AgGridReact 组件创建了 AgGrid,使用文档中的示例设置服务器端数据源,但不知何故无限滚动不起作用。 getRows 函数仅在初始渲染时调用,网格上不显示滚动条。
import { AgGridReact } from '@ag-grid-community/react';
import {
AllModules,
ColumnApi,
GridReadyEvent,
IServerSideGetRowsParams,
ModelUpdatedEvent,
GridApi,
ColDef,
ToolPanelVisibleChangedEvent,
} from '@ag-grid-enterprise/all-modules';
export const DataGrid = <T extends unknown>({ rows, columns, onRowsFetch }: React.PropsWithChildren<Props<T>>) => {
const gridApi = useRef<GridApi>();
const gridColumnApi = useRef<ColumnApi>();
return (
<Box height="800px" width="100%" boxSizing="border-box" className="ag-theme-material">
<AgGridReact
modules={AllModules}
popupParent={document.body}
defaultColDef={defaultColDef}
headerHeight={90}
rowData={rows}
rowModelType={onRowsFetch ? 'serverSide' : 'clientSide'}
serverSideDatasource={{ getRows }}
cacheBlockSize={100}
blockLoadDebounceMillis={500}
maxBlocksInCache={100}
suppressContextMenu
colResizeDefault="shift"
columnDefs={columns as ColDef[]}
columnTypes={columnTypes.reduce((ac, a) => ({ ...ac, [a]: {} }), {})}
onGridReady={onGridReady}
onModelUpdated={resizeColumns}
onGridSizeChanged={resizeColumns}
onToolPanelVisibleChanged={resizeColumns}
suppressMovableColumns
suppressColumnMoveAnimation
sideBar={sideBarDef}
suppressMenuHide
alwaysShowVerticalScroll
/>
</Box>
);
function onGridReady({ api, columnApi }: GridReadyEvent) {
gridApi.current = api;
gridColumnApi.current = columnApi;
api.sizeColumnsToFit();
api.setFilterModel({});
}
function resizeColumns({ api }: ModelUpdatedEvent | ToolPanelVisibleChangedEvent) {
api.sizeColumnsToFit();
}
async function getRows({ request, successCallback, failCallback }: IServerSideGetRowsParams) {
if (!onRowsFetch) {
return;
}
try {
const result = await onRowsFetch({
startRow: request.startRow,
endRow: request.endRow,
sort: parseSortModel(request.sortModel),
filter: parseFilterModel(request.filterModel),
});
successCallback(result.content, result.endRow ?? -1);
} catch (error) {
failCallback();
throw error;
}
}
};
对 api 的请求不包括 startRow 和 endRow 参数(getRows 函数的 params
参数的属性 request.startRow 和 request.endRow 不知何故未定义)。
但是,api 请求仍然 returns 具有以下响应:
{
content: [...rowData],
endRow: 10,
lastRow: 474,
startRow: 0,
}
我在这里错过了什么?
显然,代码没有问题。问题出在 ag-grid 软件包的版本中。我已将其从 v25.3
降级为 v24.1
,现在一切正常。