【问题标题】:Return value from custom hook doesn't get updated outside its file自定义挂钩的返回值不会在其文件之外更新
【发布时间】: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


    【解决方案1】:

    看起来您只是从自定义挂钩返回 valuesetIsDarkMode

    尝试像这样更改您的代码:

    export const useColorScheme = () => {
        ...
        return { value, isDarkMode, setIsDarkMode };
    };
    
    const { isDarkMode } = useColorScheme();
    

    【讨论】:

    • 抱歉,我已经更新了问题。我打算使用的变量是value,我返回了它,但是每当它发生变化时,它不会反映在第二个useEffect 中,而它会在钩子本身发生变化时反映。
    猜你喜欢
    • 2022-01-21
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多