Reactjs 自定义挂钩的useState和useEffect困难

Reactjs 自定义挂钩的useState和useEffect困难,reactjs,Reactjs,你好,我有一个定制钩子的问题 在渲染组件时,“一切正常”会在存储中创建密钥,但当我尝试单击开关主题时,我的设置主题总是变亮,而不是变暗 我不知道我错在哪里 代码: 例如: gif: App.js中的 setTheme(theme.type === "light" ? darkTheme : lightTheme); 会解决你的问题 有什么解释吗?我试图解决这个问题,因为我把我的主题放在组件和钩子里,我也不明白为什么我把类型发送到一个对象,它不工作,我以前用过这个,但我想用这种方式改进我的代码

你好,我有一个定制钩子的问题

在渲染组件时,“一切正常”会在存储中创建密钥,但当我尝试单击开关主题时,我的设置主题总是变亮,而不是变暗

我不知道我错在哪里

代码:

例如:

gif:

App.js中的

setTheme(theme.type === "light" ? darkTheme : lightTheme);

会解决你的问题

有什么解释吗?我试图解决这个问题,因为我把我的主题放在组件和钩子里,我也不明白为什么我把类型发送到一个对象,它不工作,我以前用过这个,但我想用这种方式改进我的代码,我在2中导入我的主题files@gabriel,我已经修改了你的代码,看看是否有帮助。
function usePersistedState(key, type) {
  console.log(key, type, 'xf');
  const [state, setState] = useState(() => {
    console.log('first');
    const storageValue = JSON.parse(localStorage.getItem(key));
    switch (storageValue) {
      case 'dark':
        return darkTheme;
      case 'light':
        return lightTheme;
      default:
        return lightTheme;
    }
  });

  useEffect(() => {
    const storageValue = JSON.parse(localStorage.getItem(key));
    if (storageValue !== state.type) {
      localStorage.setItem(key, JSON.stringify(state.type));
    }
  }, [key, state]);
  return [state, setState];
}
setTheme(theme.type === "light" ? darkTheme : lightTheme);