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

如何在MUI DataGrid组件中实现筛选数据本地存储与重载恢复?

实现MUI DataGrid筛选状态持久化到本地存储

核心思路

监听DataGrid的筛选变更事件,将筛选状态存入localStorage;组件初始化时从本地存储读取并恢复筛选配置。

具体实现步骤

1. 初始化筛选状态

用React的useState管理筛选状态,初始值优先从localStorage读取,无存储数据则设为空对象:

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

const MyDataGrid = () => {
  // 从本地存储读取并解析筛选配置
  const initialFilterModel = JSON.parse(localStorage.getItem('dataGridFilters')) || {};
  const [filterModel, setFilterModel] = useState(initialFilterModel);

2. 同步筛选变更到本地存储

通过DataGrid的onFilterModelChange回调,每次筛选变化时更新状态并写入本地存储:

const handleFilterChange = (newFilterModel) => {
    setFilterModel(newFilterModel);
    // 将筛选对象转为字符串存入本地存储
    localStorage.setItem('dataGridFilters', JSON.stringify(newFilterModel));
  };

3. 绑定状态与回调到DataGrid

把filterModel和onFilterModelChange传递给DataGrid组件,完成状态绑定:

return (
    <div style={{ height: 400, width: '100%' }}>
      <DataGrid
        rows={yourRows} // 替换为你的业务行数据
        columns={yourColumns} // 替换为你的列配置
        filterModel={filterModel}
        onFilterModelChange={handleFilterChange}
        // 其他自定义配置项
      />
    </div>
  );
};

export default MyDataGrid;

4. 可选优化处理

  • 多表格区分:如果页面有多个DataGrid,给本地存储的key加专属前缀(比如'userListDataGridFilters'),避免状态冲突。
  • 重置筛选:添加重置按钮,清空状态并删除本地存储的对应项:
const handleResetFilters = () => {
  const emptyFilterModel = {};
  setFilterModel(emptyFilterModel);
  localStorage.removeItem('dataGridFilters');
};

注意事项

  • localStorage仅支持字符串存储,必须用JSON.stringify和JSON.parse完成对象与字符串的转换。
  • 本地存储的数据会随浏览器缓存清除而丢失,若需跨设备同步,需改用后端存储方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:57:05