【发布时间】:2021-11-16 16:47:40
【问题描述】:
我的DarkModeToggle.js 文件中有这个自定义钩子:
export const useColorScheme = () => {
const systemPrefersDark = useMediaQuery({
query: '(prefers-color-scheme: dark)',
});
const [isDarkMode, setIsDarkMode /*,removeThemeState*/] =
useLocalstorage('isDarkTheme');
const value = useMemo(
() =>
isDarkMode === undefined ||
isDarkMode === null ||
(isDarkMode !== undefined &&
isDarkMode !== null &&
typeof isDarkMode !== 'boolean')
? systemPrefersDark
: isDarkMode,
[isDarkMode, systemPrefersDark]
);
useEffect(() => {
console.log(value);
if (value) {
document.body.setAttribute('darkTheme', true);
} else {
document.body.removeAttribute('darkTheme');
}
}, [value]);
return [value, setIsDarkMode];
};
然后在我使用这个钩子的组件中,我有以下代码:
const [value] = useColorScheme();
React.useEffect(() => {
console.log(value);
}, [value]);
问题在于,在第二个文件中,value 即使在它发生更改时也只记录到控制台一次,而在 useColorScheme 挂钩中的 useEffect 中,它总是在它发生更改时被记录。
【问题讨论】:
标签: reactjs react-hooks use-effect