【发布时间】:2020-04-09 14:16:09
【问题描述】:
我的 App 组件中有以下代码。
const darkMode = window.matchMedia('(prefers-color-scheme: dark)');
const [isDarkMode, setIsDarkMode] = React.useState(darkMode.matches);
const darkModeChangeHandler = (e) => {
console.log('e.matches', e.matches);
setIsDarkMode(e.matches);
};
darkMode.addListener(darkModeChangeHandler);
React.useEffect(() => {
console.log('dark mode', isDarkMode);
if (isDarkMode)
require('bootswatch/dist/darkly/bootstrap.min.css');
else
require('bootswatch/dist/flatly/bootstrap.min.css');
return () => {
darkMode.removeListener(darkModeChangeHandler);
};
}, [isDarkMode]);
当我从浅色模式开始,然后进入系统设置并打开深色模式时,会加载深色 css,但是当我关闭深色模式时 css 不会更新。当我在黑暗模式下开始时,相反的情况也会发生。
您可以看到我正在记录 isDarkMode 的值,并且每次打开/关闭暗模式时它都会更新。谁能解释为什么CSS只是第一次改变?有没有更好的方法来处理 css 的更新?
【问题讨论】:
-
require在 if 条件下,你没有收到警告什么的吗? -
没有错误。控制台中唯一弹出的是当我记录 isDarkMode 的值时。每次我更改系统设置时都会触发该日志,但加载的样式表似乎只更改一次。
标签: css reactjs matchmedia