当前位置: 首页 > 知识库问答 >
问题:

react不根据状态更新localstorage值[重复]

夹谷志
2023-03-14

我正在使用react在我的网站中切换明暗模式。我还希望主题使用localstorage持久化。问题是,当单击switch切换主题时,相应的localstorage主题值不会更新。我知道状态更新是异步的,但我想解决这个问题。

我的代码:

const [darkMode , setDarkMode] = useState(false);

  //change theme 
  const toggleTheme = ()=>{ 

    setDarkMode(!darkMode);
    const root = window.document.documentElement;
    if(localStorage.getItem("isDark")=== null){
      localStorage.setItem("isDark",darkMode);
    }else{
      localStorage.setItem("isDark",darkMode);
    }
    root.classList.toggle('dark');

  }

我尝试使用async await,但结果是一样的。

共有1个答案

柳英资
2023-03-14

您可以使用useEffect来监视darkmode

这里,每次更新darkMode值时都会调用useEffect。因此,在内部设置localstorage值。我删除了,如果..else..条件,因为我想没有必要,如果您觉得可以保留它的话。

const [darkMode , setDarkMode] = useState(false);

useEffect(() => {
  localStorage.setItem("isDark", darkMode);
}, darkMode);
 
// change theme 
const toggleTheme = ()=>{ 
  setDarkMode(!darkMode);
  const root = window.document.documentElement;
  root.classList.toggle('dark');
}
 类似资料:
  • 所以我有这个: 只是一个数组的数字例如然而没有给出正确的总数,但?我甚至放了一个超时延迟,看看这是否解决了问题。任何明显的还是我应该发布更多的代码?

  • 它几乎添加了一个对象,该对象包含来自主窗体的子窗体的值。 这是我用作按钮的函数的函数。 这将一个新对象添加到一个名为的状态,该状态是一个对象数组。 提前谢了。

  • 我正在从一个文件导出常量并将其导入另一个文件,如下所示: 常数.js App.js 我希望我的初始状态是在构造函数中设置的,然后在componentWillMount上,我希望使用常量文件中的值设置状态,然后再围绕组件和流添加进一步的逻辑。 但是,我发现,我的状态没有被更新,如果我在调用setState之后记录控制台日志,状态仍然没有定义,如果我引入一个方法,需要state中的值,那么在执行堆栈的

  • 我正忙着创建VB. Net Windows应用程序。我正在使用带有名为skedulering的表的microsoft sql服务器数据库。我正在尝试使用基于另一列(即Kode)的唯一值更新一列(即Groep)。此值接受Kode值的前三个字符并向其添加一个整数。我认为我的意思最好用以下内容来解释: 所有红色边框行都具有相同的Groep值。有人能帮我创建sql语句吗? 问候

  • 我试图将“加载”的状态从true更改为false,但当我调用一个函数并在该函数中设置“this.setState({loading:false})”时,加载状态仍然保持true。 在下面的代码中,当按钮按钮函数被调用时,它将“加载”状态设置为真,但当用户成功登录“加载”状态时,应该变为假,这样我的渲染按钮函数将重新渲染,旋转器可以隐藏自己并显示按钮。 为什么LoginSAccess函数中的“加载”

  • 我正在尝试使用状态将一个表单输入值复制到另一个表单输入值,但状态没有更新 我创建了一个带有按钮的表单,其中左侧表单输入的值应复制到右侧表单输入。这是我的代码: 无论我做什么,dbSecName的状态都不会改变。我试着设置一个新的常量。我尝试使onclick函数异步并等待。如果我为我试图设置的变量的值添加,我可以正确地看到它,但是dbSecName的console.log总是显示原始值。 我真的不知