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

MUI X Data Grid自定义分页onChange类型不匹配问题修复

MUI X Data Grid自定义分页TS2322错误排查与修复

错误原因

MUI X Data Grid默认将slotProps.pagination.onChange的类型推断为FormEventHandler,但自定义分页组件依赖的是MUI原生Pagination组件的onChange签名((event: React.ChangeEvent<unknown>, page: number) => void),两者类型不匹配,触发TS2322类型错误。

修复方案

显式指定slotProps.pagination的类型,让TypeScript匹配自定义分页组件的props类型,具体有两种实现方式:

方式一:直接为slotProps指定类型

定义slotProps时明确其类型为包含自定义PaginationProps的对象:

import { GridPaginationSlotProps } from '@mui/x-data-grid';

// 自定义分页组件的props类型(已存在)
interface PaginationProps {
  page: number;
  count: number;
  onChange: (event: React.ChangeEvent<unknown>, page: number) => void;
}

// 定义slotProps并指定类型
const slotProps: { pagination: PaginationProps } = {
  pagination: {
    page: paginationModel.page,
    count: Math.round(rows.length / paginationModel.pageSize),
    onChange: handleChangePagination,
  },
};

// 在DataGrid中使用
<DataGrid
  rows={rows}
  columns={columns}
  checkboxSelection
  autoHeight
  disableColumnMenu
  paginationModel={paginationModel}
  slots={{
    pagination: Pagination,
    toolbar: DataGridTitle,
  }}
  slotProps={slotProps}
  onPaginationModelChange={setPaginationModel}
  disableRowSelectionOnClick
  rowSelection
  hideFooterSelectedRowCount
/>

方式二:使用类型断言

如果不想单独定义slotProps变量,可直接在slotProps.pagination上添加类型断言:

slotProps={{
  pagination: {
    page: paginationModel.page,
    count: Math.round(rows.length / paginationModel.pageSize),
    onChange: handleChangePagination,
  } as GridPaginationSlotProps & PaginationProps,
}}

说明

两种方式都能解决类型不兼容问题,推荐方式一,因为它的类型声明更清晰,维护性更强。自定义分页组件的代码无需修改,保持原有逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:12:52