【发布时间】:2018-02-14 19:41:39
【问题描述】:
如您所见,我为整个项目加载了一个 scss 文件,我想知道是否可以通过单击按钮更改加载的 scss 文件。请记住,此 scss 文件适用于根组件,但我将把按钮放在它的孙子组件上。
我已经尝试了一些事情,但问题显然是除了通过导入之外没有其他方法来属性 scss 文件(这是在 /Components/App.jsx 中):
import '../scss/app.scss';
//import '../scss/darcula.scss'; for dark theme.
如果我取消上面的注释,导入的 scss 是 darcula,但我无法动态更改我知道的导入集。
一个可接受的解决方案是在子级中发生的触发单独导入,它不会完全替换其他文件,而是仅取代每个重新定义的样式,允许我只更改颜色以获得我想要的“夜间模式”按钮.
我不明白为什么不能在 ifs 中隔离 requires 即使我这样做:
turnLightsOnOff() {
if (this.state.theme) {
require('../../../scss/app.scss');
this.setState({
theme: false,
});
} else {
//require('../../../scss/darcula.scss');
this.setState({
theme: true,
});
}
}
app.css 已加载,即使条件尚未满足
如果我取消注释另一行,则两个 scss 都会一个接一个地加载。
【问题讨论】:
-
不知道如何实现,只是一个简单的建议;为什么不直接使用 className 作为应用程序的主题?类似
<App className={this.props.theme} /> -
我不明白我几乎只使用 className 而不是 id。除了给 div 一个我缺少的 .class 之外,还有什么特殊的 className 功能吗?
-
抱歉,我的评论不清楚。我试图解释一些像
body.black-theme h1 { color: '#F2F2F2' } body.white-theme h1 { color: '#606060' }这样的实现。这样更改 body 的类名可以更改整个应用程序主题。这是一个解释我的解决方案的小例子。可能不适合你。 -
你能不能把它作为一个更广泛的例子,并附上具体的实施例子作为答案?作为一个初学者,我还不太清楚这会是什么样子:S