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

MUI X v4 DataGrid toolbar属性不识别csvOptions问题排查与解决

关于MUI X v4 DataGrid中csvOptions两种配置方式的差异及解决方案

我在MUI X v4 DataGrid中尝试自定义csvOptions,发现通过componentsProps传入Toolbar的配置不生效,但自定义Toolbar组件并直接给GridToolbarExport设置该选项却能正常工作。想知道两种方式的差异原因,以及如何让第一种方式生效。

差异原因

  • 内置的GridToolbar组件不会接收并传递csvOptions给内部的GridToolbarExport。componentsProps.toolbar中的参数只会传递给Toolbar组件本身,但默认的GridToolbar并没有处理csvOptions这个props,因此无法将其传递给导出按钮组件,导致配置不生效。
  • 自定义Toolbar时,你直接将csvOptions传给了GridToolbarExport组件——这个组件本身就支持该props,因此配置能直接生效。

让第一种方式生效的解决方案

要通过componentsProps传递csvOptions生效,你需要封装一层自定义Toolbar组件,接收csvOptions并将其传递给内部的GridToolbarExport,再将封装后的组件作为Toolbar传入components。

修改后的生效代码示例

import * as React from "react";
import { DataGrid, GridToolbar, GridToolbarExport } from "@mui/x-data-grid";
import { useDemoData } from "@mui/x-data-grid-generator";

// 封装支持接收csvOptions的Toolbar组件
const CustomizableToolbar = ({ csvOptions }) => (
  <GridToolbar>
    {/* 替换默认导出按钮,传入csvOptions */}
    <GridToolbarExport csvOptions={csvOptions} />
  </GridToolbar>
);

export default function ExportSelectorGrid() {
  const { data } = useDemoData({
    dataSet: "Commodity",
    rowLength: 4,
    maxColumns: 6
  });

  return (
    <div style={{ height: 300, width: "100%" }}>
      <DataGrid
        {...data}
        components={{
          Toolbar: CustomizableToolbar
        }}
        componentsProps={{
          toolbar: {
            csvOptions: { delimiter: ";" }
          }
        }}
      />
    </div>
  );
}

原代码示例对比

示例1:通过componentsProps传入不生效

import * as React from "react";
import { DataGrid, GridToolbar } from "@mui/x-data-grid";
import { useDemoData } from "@mui/x-data-grid-generator";

export default function ExportSelectorGrid() {
  const { data } = useDemoData({
    dataSet: "Commodity",
    rowLength: 4,
    maxColumns: 6
  });

  return (
    <div style={{ height: 300, width: "100%" }}>
      <DataGrid
        {...data}
        components={{
          Toolbar: GridToolbar
        }}
        componentsProps={{
          toolbar: {
            csvOptions: { delimiter: ";" }
          }
        }}
      />
    </div>
  );
}

/***
导出结果(仍使用默认逗号分隔):
Desk,Commodity,Trader Name,Trader Email,Quantity
D-1600,Cocoa,Ronald Malone,gewcu@vinwuz.by,"7,238"
D-1965,Coffee C,Todd Hammond,ovlo@comeh.sb,"70,264"
D-2173,Coffee C,Alexander Salazar,bo@ufhehhaw.sj,"36,223"
D-4616,Rough Rice,Bruce Ferguson,ih@zorihanu.cy,"19,020"
**/

示例2:自定义Toolbar直接配置生效

import * as React from "react";
import {
  DataGrid,
  GridToolbar,
  GridToolbarContainer,
  GridToolbarExport
} from "@mui/x-data-grid";
import { useDemoData } from "@mui/x-data-grid-generator";

function CustomToolbar() {
  return (
    <GridToolbarContainer>
      <GridToolbarExport csvOptions={{ delimiter: ";" }} />
    </GridToolbarContainer>
  );
}

export default function ExportSelectorGrid() {
  const { data } = useDemoData({
    dataSet: "Commodity",
    rowLength: 4,
    maxColumns: 6
  });

  return (
    <div style={{ height: 300, width: "100%" }}>
      <DataGrid
        {...data}
        components={{
          Toolbar: CustomToolbar
        }}
      />
    </div>
  );
}

/** 
导出结果(使用分号分隔):
Desk;Commodity;Trader Name;Trader Email;Quantity
D-1600;Cocoa;Ronald Malone;gewcu@vinwuz.by;7,238
D-1965;Coffee C;Todd Hammond;ovlo@comeh.sb;70,264
D-2173;Coffee C;Alexander Salazar;bo@ufhehhaw.sj;36,223
D-4616;Rough Rice;Bruce Ferguson;ih@zorihanu.cy;19,020
**/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:30:55