Material UI 嵌套主题提供程序打破了 withStyles HOC

2024-04-25

我有一个使用 Create React App 创建的 React 应用程序,并使用 @material-ui/core npm 包进行主题化。

为了自定义组件,我使用 MaterialUI 提供的 withStyles 高阶组件。

根据文档它支持嵌套的 ThemeProvidershttps://material-ui.com/customization/theming/#nesting-the-theme https://material-ui.com/customization/theming/#nesting-the-theme.

但在子 ThemeProvider withStyles 内部不会应用类。

这是一个演示该问题的基本应用程序 ->https://codesandbox.io/s/vibrant-tree-eh83d https://codesandbox.io/s/vibrant-tree-eh83d

示例组件.tsx

import React, { FunctionComponent } from "react";
import {
  WithStyles,
  withStyles,
  createStyles,
  StepButton,
  Step,
  Stepper,
  Box
} from "@material-ui/core";

const styles = createStyles({
  button: {
    "& .MuiStepIcon-root.MuiStepIcon-active": {
      fill: "red"
    }
  }
});

interface Props extends WithStyles<typeof styles> {
  title: string;
}

const ExampleComponent: FunctionComponent<Props> = ({ title, classes }) => {
  console.log(title, classes);
  return (
    <Box display="flex" alignItems="center">
      <span>{title}</span>
      <Stepper activeStep={0}>
        <Step>
          <StepButton className={classes.button}>Test</StepButton>;
        </Step>
      </Stepper>
    </Box>
  );
};

export default withStyles(styles)(ExampleComponent);

App.tsx

import * as React from "react";
import { ThemeProvider, createMuiTheme } from "@material-ui/core";
import ExampleComponent from "./ExampleComponent";

const theme = createMuiTheme();

function App() {
  return (
    <ThemeProvider theme={theme}>
      <ExampleComponent title="Root" />
      <ThemeProvider theme={theme}>
        <ExampleComponent title="Nested" />
      </ThemeProvider>
    </ThemeProvider>
  );
}

export default App;

在 ExampleComponent 中,我 console.log 生成的类对象。

我想使用嵌套的 ThemeProvider 并覆盖组件内的类,而不管 ThemeProvider 是什么。 我错过了什么或者这是不可能的吗?


当您使用嵌套主题时,您无法可靠地使用 Material-UI 的全局类名(例如.MuiStepIcon-root.MuiStepIcon-active)。在嵌套主题中,“Mui...”类名称必须不同,以避免与顶级主题的 CSS 类发生冲突,因为嵌套主题会导致“Mui...”类的某些 CSS 发生冲突与众不同。

您可以使用以下语法来成功匹配嵌套主题中出现的 Mui 类名称的后缀版本:

const styles = createStyles({
  button: {
    '& [class*="MuiStepIcon-root"][class*="MuiStepIcon-active"]': {
      fill: "red"
    }
  }
});

相关回答:

  • JSS 中的 MUI 全局类名称有多可靠? https://stackoverflow.com/questions/60721323/how-reliable-are-mui-global-class-names-in-jss/60722943#60722943
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Material UI 嵌套主题提供程序打破了 withStyles HOC 的相关文章

随机推荐

  • 为什么我无法为 UINavigationBar 设置自定义色调?

    我想更改导航栏上的颜色 并且文档指出不要尝试更改 alpha 值 那么 如果所有构造函数都提供 alpha 值 如何设置不是 SDK 定义值的颜色 例如 UIColor redColor brownColor 等 我尝试获取当前的 alph
  • DAX/PowerBI - 平均集团价值

    我在 PowerBI 中有一个类似于以下内容的表 Table1 Name Group GroupScore Jim 1 75 Al 1 75 Becky 1 75 Ann 2 10 Cody 2 10 Zack 3 90 Jane 4 90
  • 为什么我的 justify-content 属性不起作用?

    我试图通过将 justify content 属性应用到父 div 来在模板的侧边栏和内容区域之间添加一些空间 但它并没有在侧边栏和内容区域之间添加该空间 我不确定我做错了什么 wrapper display flex flex direc
  • 文件夹上的 C#(Outlook 加载项)上下文菜单

    在我的 VSTO Outlook 插件中 我试图放置一个按钮 当我右键单击文件夹时会显示该按钮 在我的启动功能中我有这个 Outlook Application myApp new Outlook ApplicationClass myAp
  • 角度项目的粒子 js 背景?

    谁能解释如何为 Angular 6 项目添加粒子 js 背景 我遵循了以下链接的一些教程 但它对我不起作用 https github com VincentGarreau articles js https github com Vince
  • Array.Sort 使用重要的比较函数

    考虑以下代码C 5 0 简而言之 p 289 int numbers 1 2 3 4 5 Array Sort numbers x y gt x 2 y 2 0 x 2 1 1 1 这给出了结果 3 5 1 2 4 我在纸上尝试了这个并得到
  • 将 R ggplot 中直方图中的 y 轴标准化为按组比例

    我的问题非常类似于将 R ggplot 中直方图中的 y 轴标准化为比例 https stackoverflow com questions 11766856 normalizing y axis in histograms in r gg
  • Dialogflow通过NodeJS传递参数

    如何通过 NodeJS 请求传递参数 例如 我想传递代码中的名称 对话流会自动回答包含我传递的参数的响应 如 Hi name 我的实际要求 const request session sessionPath queryInput text
  • Xamarin.UITest:如何检索列表中的所有元素

    我有一个包含 500 个元素的列表 当我使用app Query在页面上 Xamarin UITest 只给了我 6 个元素 因为 UI 中只有 6 个元素可见 如何从 UITest 内的列表中检索所有 500 个元素 如上所述 预期行为ap
  • CMake 错误“找不到要添加属性的目标”

    在我的 CMakeLIsts txt 文件中我这样写 set LIBHELLO SRC hello c set target properties hello static PROPERTIES OUTPUT NAME hello get
  • 在JTextArea中使用Timer实现打字机效果?

    我正在制作一款文本冒险游戏 但遇到了一个问题 我无法按照我想要的方式显示一些文本 当输入一些单词时 玩家可以开始引入一个新房间 我希望这个介绍具有 打字机 效果 该事件需要在我的程序 ActionPerformed 方法中发生 例如 当用户
  • 如何在 Tridion 中获取当前登录用户的 tcmid?

    private void Subscribe EventSystem Subscribe
  • 对象不支持属性或方法日期选择器

    我试图在我的页面中放置一个日期选择器并收到此错误 我已经搜索并寻找此错误的其他答案 但找不到任何答案 如果没有对于引导程序部分 它有效 但有了它 我收到了这个错误 这背后的原因是什么 我该如何解决这个问题 这是我的index cshtml
  • 如何用mock修补模块的内部函数?

    我所说的 内部函数 是指从定义它的同一模块内调用的函数 我正在使用mock http www voidspace org uk python mock 图书馆 特别是patch http www voidspace org uk pytho
  • Android中状态栏的高度[重复]

    这个问题在这里已经有答案了 Android状态栏的高度是多少 总是一样吗 从我的测量来看 它似乎是 25dp 但我不确定它在所有平台上是否具有相同的高度 我想知道这一点以正确实现从没有状态栏的活动到有状态栏的活动的淡入淡出过渡 这个问题之前
  • windows下如何获取线程的起始地址?

    I m working on a mini windows process explorer in C I have a handle to a thread How can I retrieve starting address of t
  • 如何使用自定义复选框按钮选择表视图行选择?

    如何使用自定义按钮选择表格视图行 我有另一个按钮 称为选择表视图外部的所有内容 我的问题是 在单击表视图按钮外部时 如何选择和取消选择表视图内部的行 同时我可以在表视图中选择单行吗 如何在 swift 3 中做到这一点 这是我在 cellf
  • Spring MVC 中 Bean 集合的自定义绑定错误消息

    我们使用的是 Spring MVC 3 0 6 但我们没有使用 JSR 303 验证 仅在处理模型表单 bean 的控制器方法中使用 BindingResult 进行绑定错误 我将尝试简化下面的示例 因为问题不在于如何构建事物 因为这些决定
  • git-svn rebase 出了严重错误

    有没有办法重做 git svn rebase 或重置任何效果 在我的 8000 提交 git svn 存储库中 合并分支后出现问题 我的本地 master 没有反映任何接近完整主干日志的内容 和跑步git svn rebase正确地获取新的
  • Material UI 嵌套主题提供程序打破了 withStyles HOC

    我有一个使用 Create React App 创建的 React 应用程序 并使用 material ui core npm 包进行主题化 为了自定义组件 我使用 MaterialUI 提供的 withStyles 高阶组件 根据文档它支