【发布时间】:2021-07-14 15:42:02
【问题描述】:
我目前有两个主题文件,theme.js 和 theme-dark.js。我也有一个复杂的基于 React 的站点已经建立,我找不到一种方法来实现用户通过站点上的某些切换器在两个主题文件之间切换的方式。
这就是我的index.js 渲染函数的样子:
const rootElement = document.getElementById('root')
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
rootElement
)
这就是App.tsx文件中的相关代码的样子:
<ThemeProvider theme={theme}>
<CssBaseline />
<SnackbarProvider
.....
</SnackbarProvider>
</ThemeProvider>
App.tsx 文件中的上述代码嵌套在一些自定义上下文提供程序组件中,并包含一些用于加载站点初始组件的数据。
我在使用现有代码实现主题切换器以在theme.js 和theme-dark.js 之间切换时遇到了一些问题。如果有人可以推动我朝着正确的方向前进,我将不胜感激。不幸的是,由于我公司的安全原因,这是我可以粘贴的所有实际代码,但我认为这里的主要问题是index.js 中的<Provider> 元素在提供自定义主题提供程序时会中断。
【问题讨论】:
-
您作为道具传递的
theme也是theme.js文件吗?如果是,您想根据一些切换将其更改为theme-dark? -
@BadalSaibo 是的,
theme是theme.js文件。目标是根据用户单击切换器或网站上的某些输入将其更改为theme-dark文件。 -
那么除了切换之外,您当前的实现是否正常工作?另外,“当提供自定义主题提供程序时,index.js 中的
元素会中断”是什么意思。 -
@BadalSaibo 我当前的实现有效-
theme道具正确地通过了正常的theme.js文件,如果我将theme道具初始化更改为引用theme-dark.js,它会显示主题正确。我使用this 指南作为实现主题切换器的基础,当我进入必须将CustomThemeProvider组件添加到index.js的步骤时,当CustomThemeProvider嵌套在<Provider>标签。我会尝试重新创建特定的错误。
标签: css reactjs material-ui themes