首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用React.StrictMode修复ThemeProvider

如何用React.StrictMode修复ThemeProvider
EN

Stack Overflow用户
提问于 2020-04-14 04:35:26
回答 1查看 238关注 0票数 3

我正在尝试设置深色模式和浅色模式主题之间的切换。在消除了项目中的几乎所有内容之后,我设法在一个最小的示例中重现了这个问题。

当我使用React.StrictMode JSX包装器useful to prevent issues as you develop时,可以使用ThemeProvider切换一次主题,但之后所做的更改将不再应用。

这是一个可以玩的live code example。检查它,并点击切换暗模式按钮几次,您将看到它永远不会回到亮模式。

但是,如果您只删除包含所有内容的React.StrictMode标记,应用程序将按预期运行:

从这里开始

代码语言:javascript
复制
function App() {
  return (
    <React.StrictMode>
      <ThemeContextProvider>
        <ThemeWrapper />
      </ThemeContextProvider>
    </React.StrictMode>
  );
}

要这样做:

代码语言:javascript
复制
function App() {
  return (
    <ThemeContextProvider>
      <ThemeWrapper />
    </ThemeContextProvider>
  );
}

有什么想法吗?这是react还是material-ui bug?或者有什么方法可以不同地使用它们呢?

EN

回答 1

Stack Overflow用户

发布于 2021-06-24 15:36:21

参加聚会太晚了,但我也遇到了同样的问题。

很明显,Material UI并不完全支持严格模式,但是你可以使用这个函数来解决这个问题,并且仍然可以使用material主题和严格模式。

代码语言:javascript
复制
import { unstable_createMuiStrictModeTheme } from "@material-ui/core/styles";

我是这样使用它的

代码语言:javascript
复制
  const theme = unstable_createMuiStrictModeTheme(themeCreator(themeName));

  return (
    <ThemeContext.Provider value={setThemeName}>
      <MuiThemeProvider theme={theme}>
        <CssBaseline />
        {props.children}
      </MuiThemeProvider>
    </ThemeContext.Provider>
  );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61196283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档