【问题标题】:Add custom style inside DataGrid Toolbar's popup component Material-UI在 DataGrid Toolbar 的弹出组件 Material-UI 中添加自定义样式
【发布时间】:2021-12-01 13:44:57
【问题描述】:

我正在通过从Material-UI 修改现有的Grid Toolbar 组件来创建自定义Data Grid Toolbar 组件。

HereGrid Toolbar 组件的官方示例:

如果我们单击Grid Toolbar 组件之一,它将显示一个弹出窗口/弹出窗口,如下面的屏幕截图所示。

我想要做的是从每个Grid Toolbar 组件更改每个弹出窗口/弹出窗口中的所有字体大小。

例如,我尝试更改一个文本。 从下面的截图中我们可以看到,如果我们检查文本然后直接更改font-sizecolor 属性,它会改变。

但如果我抓取并复制选择器(在本例中为 .MuiTypography-body1),然后将其粘贴到我的代码中,则没有任何变化(font-sizecolor 属性不会改变)。

下面是简单的代码:

const CustomGridToolbarColumns = withStyles((theme) => ({
  root: {
    color: "dodgerblue",
    "& .MuiTypography-body1": {
      fontSize: 20,
      color: "red"
    }
  }
}))(GridToolbarColumnsButton);

我还想更改每个Grid Toolbar 组件的每个弹出/弹出窗口内的所有font-sizecolor 属性。 我检查了弹出/弹出窗口,然后更改了 font-sizecolor 属性,但仍然无法正常工作,如下面的屏幕截图所示。

以下是依赖项(在 package.json 文件中):

"@material-ui/core": "^4.12.3",
"@material-ui/styles": "^4.11.4",
"@mui/x-data-grid-pro": "^4.0.0",

这里是完整代码:https://codesandbox.io/s/data-grid-material-ui-custom-toolbar-kd9gj

所以我的问题是:

  1. 我们如何更改每个Grid Toolbar 组件的popup/popper 中的一些属性?
  2. 我们如何更改每个 Grid Toolbar 组件的 popup/popper 中的所有属性?

【问题讨论】:

    标签: javascript css reactjs datagrid material-ui


    【解决方案1】:

    您可以inspect the element 并看到您需要应用样式的组件称为GridPanel。这是过滤器和列面板的包装器组件。查看所有组件槽here 以供参考。

    V5

    <DataGrid
      {...data}
      components={{
        Toolbar: GridToolbar,
      }}
      componentsProps={{
        panel: {
          sx: {
            '& .MuiTypography-root': {
              color: 'dodgerblue',
              fontSize: 20,
            },
            '& .MuiDataGrid-filterForm': {
              bgcolor: 'lightblue',
            },
          },
        },
      }}
    />
    

    为了改变另外2个GridMenus(密度/导出)的样式,你需要定位MuiDataGrid-menuList类名。目前我发现没有其他方法可以使用全局样式,因为 DataGrid 不允许您自定义 GridMenu 组件:

    <GlobalStyles
      styles={{
        '.MuiDataGrid-menuList': {
          backgroundColor: 'pink',
    
          '& .MuiMenuItem-root': {
            fontSize: 26,
          },
        },
      }}
    />
    

    V4

    import { DataGrid, GridToolbar, GridPanel } from "@mui/x-data-grid";
    
    const useStyles = makeStyles({
      panel: {
        '& .MuiTypography-root': {
          color: 'dodgerblue',
          fontSize: 20,
        },
      },
    });
    
    <DataGrid
      {...data}
      components={{
        Toolbar: GridToolbar,
      }}
      componentsProps={{
        // GridPanel
        panel: { className: classes.panel },
      }}
    />
    
    <GlobalStyles
      styles={{
        ".MuiDataGrid-gridMenuList": {
          backgroundColor: "pink",
    
          "& .MuiMenuItem-root": {
            fontSize: 26
          }
        }
      }}
    />
    

    【讨论】:

    • 很好,适用于GridToolbarColumnsButtonGridToolbarFilterButton 组件。我已经使用与您的回答相同的方式更新了我的沙箱,以设置 GridToolbarDensitySelectorGridToolbarExport 组件的样式。我检查了GridToolbarDensitySelectorGridToolbarExport,然后我发现两个组件的弹出窗口具有相同的父选择器。它是.MuiGridMenu-root。但我没有从文档中看到任何“菜单”插槽。那么如何使用与您相同的方式从GridToolbarDensitySelectorGridToolbarExport 设置弹出窗口的样式?
    • @JabalLogian 这比我预期的要难很多,但是您可以通过定位正确的类名来做到这一点,请参阅我的更新答案。
    • @NearHuscarl 是否可以使用 makeStyles?我的反应组件已经在使用 makeStyles。谢谢
    • @ZBay 我在答案中添加了makeStyles 方法并删除了withStyles 代码,因为它不再很流行。您仍然可以在代码和框中看到这两种方法以供参考。
    • @NearHuscarl 为我工作。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2021-11-17
    • 2020-07-16
    • 2018-11-23
    相关资源
    最近更新 更多