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

MUI X Data Grid筛选后分页不同步问题求助

MUI DataGrid筛选后分页组件未自动禁用的解决方法

当对DataGrid列执行筛选后仅返回1条数据,但分页组件仍渲染全部页码且允许切换至下一页,这是因为默认情况下DataGrid的分页逻辑基于原始数据总量,而非筛选后的实际数据量。以下是解决这个问题的具体方案:

核心思路

通过监听筛选状态变化,获取筛选后的实际数据条数,以此动态控制分页组件的显示与禁用。

具体实现

1. 实时获取筛选后的数据量

利用DataGrid的API获取筛选后的数据集,监听筛选模型的变化来更新数据量:

import { DataGrid, useGridApiContext } from '@mui/x-data-grid';
import { useEffect, useState } from 'react';

// 假设你的原始数据为rows,列配置为columns
export default function YourGridComponent() {
  const [filteredRowCount, setFilteredRowCount] = useState(rows.length);
  const apiRef = useGridApiContext();

  useEffect(() => {
    // 获取筛选后的所有行
    const filteredRows = apiRef.current.getFilteredRows();
    setFilteredRowCount(filteredRows.length);
  }, [apiRef]);

  // 其他组件逻辑...
}

2. 动态控制分页状态

根据筛选后的行数,控制分页组件的可用性或显示:

  • 方法一:直接禁用分页(当数据不足一页时)
<DataGrid
  rows={rows}
  columns={columns}
  pageSize={5}
  rowsPerPageOptions={[5]}
  // 当筛选后数据量小于等于单页容量时,禁用分页
  pagination={filteredRowCount > 5}
/>
  • 方法二:自定义分页组件,数据不足时隐藏分页
import { GridPagination } from '@mui/x-data-grid';

const CustomPagination = () => {
  const apiRef = useGridApiContext();
  const filteredRows = apiRef.current.getFilteredRows();
  const pageSize = apiRef.current.getPageSize();

  // 数据不足一页时不渲染分页组件
  if (filteredRows.length <= pageSize) {
    return null;
  }

  return <GridPagination />;
};

// 在DataGrid中使用自定义分页组件
<DataGrid
  rows={rows}
  columns={columns}
  pageSize={5}
  rowsPerPageOptions={[5]}
  components={{ Pagination: CustomPagination }}
/>

3. 阻止无效的分页切换(可选)

如果需要保留分页组件但禁止无效切换,可以监听分页变化事件:

<DataGrid
  // 其他属性...
  onPageChange={(params) => {
    const maxValidPage = Math.ceil(filteredRowCount / params.pageSize) - 1;
    // 如果切换到的页码超出有效范围,阻止操作
    if (params.page > maxValidPage) {
      apiRef.current.setPage(maxValidPage);
    }
  }}
/>

原理说明

MUI DataGrid默认使用rowCount属性(未设置时取原始数据长度)来计算分页逻辑,而筛选后的实际数据量需要通过getFilteredRows()API主动获取。通过同步这个值,就能让分页组件根据真实数据量调整状态,符合预期行为。

内容的提问来源于stack exchange,提问作者V Yaswanth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:32:40