reactjs - 在 createTheme 中覆盖 Box 组件

标签 reactjs material-ui themeprovider

我有一个应用程序利用盒子来代替通常放置 div 的位置以保留在 MUI 生态系统中。我的问题是,是否可以对所有框组件进行全局主题覆盖,就像如何使用主题提供程序全局覆盖所有卡片的背景颜色一样。

最佳答案

您可以使用 createTheme() 全局覆盖 Card 样式,因为 Card 有一个 name和一个 styleOverrides使用 styled() 设置样式时的回调应用程序接口(interface)。但是,Box 没有,正如您从定义 here 中看到的那样.

const theme = createTheme({
  components: {
    // this works
    MuiCard: {
      styleOverrides: {
        //
      }
    },
    // this does not work
    MuiBox: {
      styleOverrides: {
        //
      }
    }
  }
});

如果你想创建一个像 Box 这样的基础组件,可以通过 createTheme 全局设置样式,你需要在调用 时在选项中定义以下属性>样式化()

  • name:因此样式引擎可以识别您的组件。
  • overridesResolver:让 MUI 知道如何解析最终样式(通过与组件的自定义变体、prop 和状态创建的其他样式相结合)。

下面是演示的最小示例:

const theme = createTheme({
  components: {
    MuiDiv: {
      styleOverrides: {
        root: {
          backgroundColor: "green"
        }
      }
    }
  }
});

const Div = styled("div", {
  name: "MuiDiv",
  overridesResolver: (props, styles) => {
    return [styles.root];
  }
})();
<Div sx={{ width: 10, height: 10 }} />

现场演示

Codesandbox Demo

引用资料

关于reactjs - 在 createTheme 中覆盖 Box 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69455056/

相关文章:

css - 如何在 Material ui makeStyles 中使用 @supports css 规则?

javascript - 通过 React 路由器将 prop 传递给组件

reactjs - Material-UI:设置 rowCount 时 DataGrid 服务器端分页问题

javascript - Material UI 中的 RTL 导致破坏了我的应用程序外观

google-maps - 使用 React-google-maps v6+ 访问 map 引用

html - 如何在 reactjs 中正确地绝对定位

javascript - React JS 中的菜单切换

reactjs - 网络错误 Django 后端到 React 前端