在 createTheme 中覆盖 Box 组件

Override Box component in createTheme

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

您可以使用 createTheme() 全局覆盖 Card 样式,因为 Card 有一个 name and a styleOverrides callback when it is styled using the styled() API. However, the Box does not, as you can see from the definition here.

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

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

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

下面是演示的最小示例:

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 }} />

现场演示

参考资料