【发布时间】:2017-04-06 09:31:54
【问题描述】:
我是 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>
);
}
};
componentDidUpdate 中对 getMuiTheme 的调用始终返回 lightBaseTheme,即使它已在渲染调用中设置。
我或许应该补充一点,最终目的是能够即时更改主题,因此不能直接设置 <body 元素的样式。
【问题讨论】:
-
是否会设计一些
div包装整个应用程序,而不是body来满足您的需求?这样你就可以使用标准的style道具。 -
@MichałWerner 嗨,我认为这并不理想,因为有时 react 会直接在正文上写入 html 元素,在
#root之外。弹出框、对话框...
标签: reactjs material-ui