gpt4 book ai didi

javascript - 如何使用 React hooks 在 localStorage 中存储初始切换状态

转载 作者:行者123 更新时间:2023-11-28 14:11:25 24 4
gpt4 key购买 nike

我正在尝试将切换的状态存储在本地存储中,作为在刷新时保留模式或类似内容的示例。

我已经完成了大部分工作,在第一页加载时, bool 值只是设置为 null,这不会渲染 <p>I'm toggled</p>标签,当您打开和关闭时,状态存储在本地存储中,我可以从开发工具中的“应用程序本地存储”选项卡中看到该存储。

我遇到的问题是,在初始页面加载时,如果再次刷新页面,<p>I'm toggled</p>默认情况下显示标签..以及此后的每次刷新。切换仍然有效,但任何刷新都会默认返回显示的状态 - 这是不应该的。

有人可以帮我理解为什么会发生这种情况吗?我尝试了几种变体,但似乎无法解决。

import React from 'react';
import ReactDOM from 'react-dom';

const App = () => {
const [toggle, setToggle] = React.useState(localStorage.getItem('toggle'))

React.useEffect(() => {
localStorage.setItem('toggle', toggle)
}, [toggle]);

return (
<div>
<button onClick={() => {
setToggle(!toggle)
}}>
Toggle
</button>
{toggle ? <p>I'm toggled</p> : null}
</div>
);
};

export default App;

ReactDOM.render(<App />, document.getElementById('root'));

最佳答案

这是因为本地存储将您的状态存储为字符串。因此,当您切换状态时,它会在保存到存储期间更改为“true”或“false”。因此,一旦刷新页面,您就会检查 !toggle。现在,此时,toggle === "false"并且 !"false" 等于 true

解决方案之一是检查存储的值是否为“true”:

const [toggle, setToggle] = React.useState(localStorage.getItem('toggle') === "true")

关于javascript - 如何使用 React hooks 在 localStorage 中存储初始切换状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com