我是 React 的新手,所以这可能很简单,但我一生都无法在文档中找到任何内容,因为该元素在 ReactDOM 之外。
我使用 material-ui 作为用户界面,它提供了两个主题:(lightBaseTheme
默认)和darkBaseTheme
深色。各种白天和黑夜模式。问题是既没有对 应用任何样式,<body>
因此页面背景不遵循主题。深色主题使用白色文本,默认白色背景上不显示。
我怀疑我需要找到一个编程解决方案并根据当前加载的主题设置背景颜色。
但是如何?我曾尝试将代码放在顶级组件的 componentDidUpdate 方法中,但这似乎总是返回浅色主题。在任何情况下,我都不确定直接写入 DOM 是否是一个好习惯,即使该body
元素在任何会受 React 影响的范围之外。
export default class app extends React.Component {
componentDidUpdate () {
const muiTheme = getMuiTheme();
const canvasColor = muiTheme.palette.canvasColor;
document.body.style.backgroundColor = canvasColor;
}
render () {
const muiTheme = getMuiTheme();
return (
<MuiThemeProvider muiTheme={getMuiTheme(darkBaseTheme)}>
<span>Rest of the app goes here</span>
</MuiThemeProvider>
);
}
};
即使在渲染调用中设置了 lightBaseTheme,在 componentDidUpdate 中对 getMuiTheme 的调用也始终返回 lightBaseTheme。
我或许应该补充一点,最终目的是能够即时更改主题,因此<body
无法直接为元素设置样式。