前端组件 ——MUI X Data Grid 知识点大全(三)

简介: 教程来源 http://unbgv.cn MUI X Data Grid 高级功能涵盖树形数据、主从视图、行分组聚合(Premium)、范围选择、图表集成、AI助手、撤销/重做、拖动填充、服务端数据源、插槽定制及状态持久化,全面支持复杂数据场景的高效开发与深度定制。

四、高级功能与定制

4.1 树形数据(Tree Data
Pro 及以上版本支持下钻式的树形数据展示,常用于展示组织结构、分类目录、文件系统等具有层级关系的数据。

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

const rows = [
  { id: 1, name: '技术部', hierarchy: ['技术部'] },
  { id: 2, name: '前端组', hierarchy: ['技术部', '前端组'] },
  { id: 3, name: '后端组', hierarchy: ['技术部', '后端组'] },
  { id: 4, name: '市场部', hierarchy: ['市场部'] },
  { id: 5, name: '运营部', hierarchy: ['运营部'] },
];

<DataGridPro
  treeData
  getTreeDataPath={(row) => row.hierarchy}
  groupingColDef={
  {
    headerName: '组织架构',
    width: 250,
  }}
  defaultGroupingExpansionDepth={1}  // 默认展开深度
/>

树形数据的异步加载:

const loadChildren = async (nodeId) => {
  const response = await fetch(`/api/organization/${nodeId}/children`);
  return response.json();
};

<DataGridPro
  treeData
  getTreeDataPath={(row) => row.path}
  onFetchRows={async (params) => {
    const children = await loadChildren(params.nodeId);
    return children;
  }}
/>

4.2 主从视图(Master Detail)
Pro 及以上版本支持在行下方展开一个子面板,展示详情的关联数据。非常适合订单-商品、用户-订单等一对多关系的展示。

<DataGridPro
  rows={orders}
  columns={orderColumns}
  getDetailPanelContent={({ row }) => (
    <div style={
  { padding: 16 }}>
      <Typography variant="h6">订单明细 - {row.orderNo}</Typography>
      <DataGrid
        rows={row.details}
        columns={detailColumns}
        hideFooter
        autoHeight
      />
    </div>
  )}
  getDetailPanelHeight={() => 300}
  getDetailPanelExpandedRowIds={({ row }) => {
    // 控制哪些行默认展开
    return row.status === 'pending' ? [row.id] : [];
  }}
/>

4.3 行分组与聚合(Premium 专属)
Premium 版本支持用户拖拽列表头进行行分组,并自动对分组后的数值列进行求和、平均等聚合运算。这是数据分析和报表类应用的核心功能。

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

const [aggregationModel, setAggregationModel] = useState({
  age: 'sum',
  salary: 'average',
});

<DataGridPremium
  rows={employeeData}
  columns={columns}
  rowGrouping
  defaultGroupingExpansionDepth={-1}  // -1 表示全部展开
  aggregationModel={aggregationModel}
  onAggregationModelChange={setAggregationModel}
  groupingColDef={
  {
    headerName: '分组',
    leafField: 'department',
  }}
/>

支持的聚合函数:
image.png
4.4 单元格范围选择(Range Selection,Premium 专属)
Premium 版本支持用户通过鼠标拖拽选择连续的行列范围,并支持键盘扩展选择(Shift + 方向键)。这是数据分析场景下的高频需求。

<DataGridPremium
  rowSelection
  cellSelection
  onCellSelectionChange={(selection) => {
    console.log('选中范围:', selection);
  }}
/>

4.5 图表集成(Chart Integration,Premium v9 新增)
在 v9.0.0 中,MUI X 引入了 Data Grid 与 Charts 组件的深度集成,允许用户直接从表格数据生成可视化图表。

import { DataGridPremium } from '@mui/x-data-grid-premium';
import { ChartsCard, ChartsLine } from '@mui/x-charts';

<DataGridPremium
  rows={salesData}
  columns={columns}
  slotProps={
  {
    toolbar: { showChartSelector: true },
  }}
>
  <ChartsCard>
    <ChartsLine
      xAxisKey="month"
      series={[{ dataKey: 'amount', label: '销售额' }]}
    />
  </ChartsCard>
</DataGridPremium>

4.6 AI 助手(AI Copilot,Premium v9 新增)
v9.0.0 版本引入了 AI 助手功能,通过 AI 自然语言生成复杂的筛选条件或生成图表视图,大幅提升数据探索效率。

<DataGridPremium
  rows={data}
  columns={columns}
  slotProps={
  {
    toolbar: { showAiAssistant: true },
  }}
  onAiAssistantQuery={(query) => {
    console.log('用户查询:', query);
    // 调用 AI API 处理查询并返回结果
  }}
/>

4.7 撤销/重做(Undo/Redo,Premium v9 新增)
Premium 版本在 v9.0.0 中引入了官方的撤销/重做(Undo/Redo)支持,允许用户回退数据变更,显著提升了数据编辑的安全性。

<DataGridPremium
  rows={editableData}
  columns={columns}
  editMode="cell"
  undoRedo
  onUndoRedo={(action) => {
    console.log('执行了撤销/重做:', action);
  }}
/>

键盘快捷键:

Ctrl + Z:撤销

Ctrl + Shift + Z 或 Ctrl + Y:重做

4.8 拖动填充(Drag Fill,Premium v9 新增)
v9.0.0 新增了拖动填充功能,用户可以通过拖动单元格右下角填充柄快速复制公式或数据序列,类似 Excel 的行为。

<DataGridPremium
  rows={spreadsheetData}
  columns={columns}
  dragFill
  onDragFill={(params) => {
    console.log('拖动填充:', params);
  }}
/>

4.9 服务端数据源(Server-side Data Source)
对于真正的海量数据(百万级以上),一次性加载全部数据到前端是不现实的。Data Grid 支持通过 unstable_dataSource 与后端 API 交互,实现懒加载、筛选、排序和分页的服务器端处理。

const dataSource: GridDataSource = {
  getRows: async (params) => {
    // 1. 获取请求参数(分页、排序、筛选、分组键)
    const { paginationModel, sortModel, filterModel, groupKeys } = params;

    // 2. 调用后端 API
    const response = await fetch('/api/data', { 
      method: 'POST', 
      body: JSON.stringify(params) 
    });
    const data = await response.json();

    // 3. 返回标准格式给 Data Grid
    return {
      rows: data.rows,
      rowCount: data.totalCount,
    };
  },
};

<DataGridPro 
  unstable_dataSource={dataSource} 
  pagination
  paginationMode="server"
  sortingMode="server"
  filteringMode="server"
/>

服务端树形数据:在 Pro 版本中,结合 unstable_dataSource 可以实现树形子节点的懒加载,简化了获取嵌套子集的数据操作,避免一次性加载全部节点。

4.10 自定义组件与插槽(Slots)
Data Grid 提供了丰富的插槽机制,允许你完全替换内部组件,实现高度定制化。

// 自定义复选框
const CustomCheckbox = (props) => <MuiCheckbox variant="outlined" {...props} />;

// 自定义加载状态
const CustomLoadingOverlay = () => (
  <Box sx={
  { display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>
    <CircularProgress />
    <Typography sx={
  { ml: 2 }}>数据加载中...</Typography>
  </Box>
);

// 自定义无数据状态
const CustomNoRowsOverlay = () => (
  <Box sx={
  { display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>
    <Typography color="textSecondary">暂无数据</Typography>
  </Box>
);

<DataGrid
  slots={
  {
    rowCheckbox: CustomCheckbox,
    loadingOverlay: CustomLoadingOverlay,
    noRowsOverlay: CustomNoRowsOverlay,
  }}
/>

image.png
4.11 状态持久化
Data Grid 支持将列顺序、列宽度、排序、筛选等状态持久化到 localStorage 或后端,实现用户个性化视图。

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

function PersistedDataGrid() {
  const apiRef = useGridApiRef();

  // 保存状态到 localStorage
  const saveState = () => {
    const state = apiRef.current.exportState();
    localStorage.setItem('datagrid_state', JSON.stringify(state));
  };

  // 恢复状态
  const restoreState = () => {
    const savedState = localStorage.getItem('datagrid_state');
    if (savedState) {
      apiRef.current.restoreState(JSON.parse(savedState));
    }
  };

  useEffect(() => {
    restoreState();
  }, []);

  return <DataGridPro apiRef={apiRef} onStateChange={saveState} />;
}

Premium 版本在 v8.16.0 中还增加了对图表集成状态的持久化与恢复支持,确保用户体验的连续性。
来源:
http://oieaw.cn

相关文章
|
1月前
|
人工智能 Linux API
全平台零门槛:Win11、Mac、Linux 通用 Hermes Agent 安装教程
Hermes Agent是Nous Research开源的自进化AI助手(MIT协议),越用越懂你。支持多工具并行、自动记忆习惯,Python编写,v0.13.0版。兼容Win/macOS/Linux/Docker,国内用户可配清华镜像快速部署,需API密钥(如Kimi)。
|
1月前
|
XML 前端开发 程序员
初级程序员必备的十大技能之 API 接口与前后端联调(一)
教程来源 http://qeext.cn/ 本文系统讲解API设计规范(RESTful/GraphQL)、HTTP协议核心(方法、状态码、头信息)、前后端联调流程及调试工具,助你打造标准化、高可用接口,打破前后端协作孤岛。
|
2月前
|
存储 人工智能 安全
意图共鸣科技:AI记忆链的盲存——你的记忆,只有你能打开
你和AI的对话,平台真能“看不见”吗?意图共鸣科技推出“盲存”技术:数据本地加密后上传,密钥仅用户持有,云端仅存密文。平台变“数据保管员”,无法访问明文,隐私由架构保障而非承诺。用户完全掌控记忆——可查、可导、可删,跨设备同步同样安全。
251 16
|
2月前
|
XML Java 测试技术
Java 的 Spring Boot 生态 —— 统治企业级后端的完整武器库
在SpringBoot出现之前(2014年前),构建JavaWeb应用是令人生畏的体验:你需要手动配置DispatcherServlet、设置XML文件、配置数据源、管理大量依赖版本,并忍受繁琐的部署流程。
323 4
|
2月前
|
存储 人工智能 自然语言处理
阿里云Token Plan是什么?为什么企业都在用?百炼AI大模型调用Token省钱方法
阿里云Token Plan是百炼平台面向企业/团队推出的AI大模型订阅服务,官方开通:https://t.aliyun.com/U/fPVHqY 以Credits统一计费,支持文本与图像生成模型,兼容主流编程及Agent工具。包月制、额度用尽即停,杜绝超支;数据安全合规,不用于模型训练。含标准/高级/尊享三档套餐,新用户可领7000万免费Tokens。
429 4
|
1月前
|
存储 人工智能 固态存储
阿里云4核云服务器租用价格解析:4核8G、4核16G、4核32G配置最新收费标准与活动价格
本文介绍了阿里云4核云服务器的配置选择、价格体系及购买策略。4核配置涵盖经济型e实例、通用算力型u2i/u2a、计算型c9i/c9a、通用型g9及内存型r9等多个实例族,分别适用于个人博客、企业Web应用、AI推理及大数据处理等场景。同时,文中列出了4核8G、16G、32G在各实例下的官方标准价及2026年活动价(如u2i实例4核8G低至1252.63元/年起)。建议用户根据业务需求选型,结合优惠券实现折上折,有效降低上云成本。
|
1月前
|
存储 弹性计算 数据库
阿里云优惠券是什么?优惠券在哪领取?领取后在哪查询?怎么使用?一文看懂~
阿里云优惠券是抵扣云产品费用的权益,含代金券、满减券、折扣券三类。学生可领300元无门槛券;个人/企业可在权益中心:https://t.aliyun.com/U/0QpP7a 免费领取;查询使用均在【费用与成本→卡券】页面,结算时自动匹配或手动选择。
141 4
|
1月前
|
人工智能 IDE API
阿里云百炼Coding Plan产品简介:支持模型、收费标准及购买和使用常见问题解答
阿里云百炼Coding Plan是面向开发者和团队的AI编程订阅服务,采用固定月费模式,Pro套餐200元/月提供9万次调用额度,整合千问、Kimi、GLM、MiniMax等顶级模型,全面兼容Claude Code、OpenClaw、Cursor等主流编程工具。额度采用5小时滚动恢复、每周及每月定期重置机制,兼顾开发连续性与成本可控性。其折算成本远低于按量计费,并通过多层级额度设计和华北2地域绑定有效防范欠费风险。适合日常代码生成、智能体开发及IDE插件集成等场景,是开发者以可预期预算拥抱AI编程的高性价比选择。
阿里云百炼Coding Plan产品简介:支持模型、收费标准及购买和使用常见问题解答
|
2月前
|
传感器 人工智能 监控
数字孪生项目的开发流程
数字孪生已进阶为“可执行孪生”,构建虚实闭环的迭代体系。涵盖需求定义、高精建模(几何/物理/行为)、多源数据集成、AI仿真决策、跨端交互渲染及持续迭代六大阶段,强调真实数据、轻量化与安全闭环。(239字)
|
2月前
|
前端开发 开发者
前端组件库——Radix UI知识点大全(二)
教程来源 http://yvyus.cn/ Radix UI提供50+无样式、高可访问性React原语组件,如Dialog、DropdownMenu、Popover等,内置ARIA支持、键盘导航与焦点管理,专注交互逻辑,样式完全由开发者掌控。

热门文章

最新文章