boz*_*ozo 0 javascript reactjs react-hooks
我正在尝试将切换的状态存储在本地存储中,作为刷新时保留模式或类似内容的示例。
我已经在大多数情况下工作了,在第一页加载时,布尔值只是设置为空,这不会呈现<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'));
Run Code Online (Sandbox Code Playgroud)
那是因为本地存储将您的状态存储为字符串。因此,当您切换状态时,它会在保存到存储期间更改为“真”或“假”。因此,一旦您刷新页面,您就会检查 !toggle。现在,当时切换 === "false" 并且!"false"等于true。
解决方案之一是检查存储的值是否为"true":
const [toggle, setToggle] = React.useState(localStorage.getItem('toggle') === "true")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |