【问题标题】:Style MUI component but have it's style overwritten by passed ThemeProvider样式化 MUI 组件,但它的样式被传递的 ThemeProvider 覆盖
【发布时间】:2023-02-07 01:01:33
【问题描述】:

我想默认设置自定义 React/MUI 组件的样式,但父 MUI ThemeProvider 仍然能够覆盖我的样式。

例如,假设我有一个默认为绿色的按钮(在我的代码中设置了样式),但它应该能够通过ThemeProvider 传递的默认主题覆盖颜色。

无论如何我似乎都找不到这样做,因为我在我的组件中应用的任何样式都成为默认样式,因为它是 CSS/样式树中的最后一个。

【问题讨论】:

  • 你如何设计你的组件?是否带有 css/scss 文件?或者使用 MUI 提供的样式对象?
  • 我尝试过使用 MUI 样式对象、应用类并使用 style/sx 道具——所有这些都优先于 ThemeProvider。
  • 您的主题提供者有主题属性吗? styled-components.com/docs/advanced
  • 非常不幸的是,这个问题没有答案,因为它实际上是一个关于 material-ui 的非常基础的话题!你有没有想出什么是最好的解决方案,或者你在主题等中使用 !important ?谢谢。

标签: reactjs material-ui themeprovider


【解决方案1】:

我无法在有关该主题的文档或 github 问题中找到太多信息 — 我只能告诉您如何应对这种情况以及它目前在 v5 中的工作方式。

似乎优先级如下:

sx > styled() > 主题

IE。 sx 具有最高优先级。

一开始你不能用你的主题覆盖某些东西似乎很奇怪,但另一方面你也希望能够偶尔用sx覆盖主题。所以对我来说,优先级是有道理的。

如果可能,您不应在主题中使用 !important,因为它会阻止 sxstyled() 完成其工作。

您要做的是运送无样式的可重用组件(没有styled()sx)并通过主题设置它们的样式。

在主题中执行着色。如果您不需要更改主题中的宽度、高度、边距和填充,您也可以通过styled() 和/或sx 进行定义。

【讨论】:

    猜你喜欢
    • 2018-06-27
    • 2020-07-21
    • 2017-04-02
    • 2020-10-16
    • 2021-08-02
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2020-05-27
    相关资源
    最近更新 更多