reactjs - 如何使用 React.StrictMode 修复 ThemeProvider
问题描述
我正在尝试为暗模式和亮模式主题设置切换。在消除了项目中的几乎所有内容后,我设法在一个最小的示例中重现了该问题。
当我使用React.StrictMode
JSX 包装器时,它有助于防止开发时出现问题,主题可以切换ThemeProvider
一次,但之后不再应用更改。
这是一个可以使用的实时代码示例。检查一下,然后按几次切换暗模式按钮,你会发现它永远不会回到亮模式。
但是,如果您只是删除React.StrictMode
包含所有内容的标签,该应用程序将按预期工作:
由此
function App() {
return (
<React.StrictMode>
<ThemeContextProvider>
<ThemeWrapper />
</ThemeContextProvider>
</React.StrictMode>
);
}
对此:
function App() {
return (
<ThemeContextProvider>
<ThemeWrapper />
</ThemeContextProvider>
);
}
有任何想法吗?这是 react 还是 material-ui 错误?或者有什么方法可以不同地使用这些?
解决方案
聚会很晚了,但我遇到了同样的问题。
Aparrently Material UI 不完全支持严格模式,但您可以使用此功能解决问题,并且仍然具有材质主题和严格模式。
import { unstable_createMuiStrictModeTheme } from "@material-ui/core/styles";
我像这样使用它
const theme = unstable_createMuiStrictModeTheme(themeCreator(themeName));
return (
<ThemeContext.Provider value={setThemeName}>
<MuiThemeProvider theme={theme}>
<CssBaseline />
{props.children}
</MuiThemeProvider>
</ThemeContext.Provider>
);
推荐阅读
- python - 在python中打印菱形
- html - CSS 变换 - 旋转和倾斜不能一起工作
- java - @Scheduled 和 @Transactional 方法中的 Spring-data-jpa 延迟加载
- android - 如何使用外键引用 Android Room 中的父实体将项目添加到子实体?
- java - 无法在 java 程序中创建初始上下文
- android - 退出时如何检索匿名帐户的数据?Firebase 身份验证匿名
- javascript - Heroku 应用程序崩溃
- elixir - 是否有混合 phx 选项来使用纱线而不是 npm?
- opengl - 如何使用 glreadpixels() 获取 z 深度
- python - 将数组分配给 DataFrame 时形状不匹配