javascript - 如何在反应中从本地存储中设置状态?
问题描述
我将 SiteData 存储在另一个文件中,我想在用户第一次访问网站时设置此数据,而不是当他/她在网站中进行更改时,我想将其存储在本地存储中,当用户再次访问网站时,我希望他们向他们展示以前的变化。所以我不想从 SiteData 文件中获取数据。我在 componentWillMount 生命周期中这样做。
componentWillMount() {
localStorage = JSON.parse(localStorage.getItem('SiteData'));
if (ls === null) {
this.setState({
MyData: SiteData
});
localStorage.setItem('SiteData',JSON.stringify( this.state.MyData));
}
else {
console.log("ls");
this.setState({
MyData: ls
});
}
}
我收到此错误:
不变违规:元素类型无效:预期为字符串(对于内置组件)或类/函数(对于复合组件),但得到:未定义。您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。
PS:我已正确导出 SiteData(导出默认 SiteData)
解决方案
猜测一下,您正在绑定一个名称('localStorage'),但随后引用了一个完全不同的名称('ls')。在您提供的代码段中,'ls' 永远不会被绑定,因此将永远是undefined
.
这对你更有效吗?
componentWillMount() {
localStorage = JSON.parse(localStorage.getItem('SiteData'));
if (localStorage === null) {
this.setState({
MyData: SiteData
});
localStorage.setItem('SiteData',JSON.stringify( this.state.MyData));
}
else {
console.log("localStorage");
this.setState({
MyData: localStorage
});
}
}
推荐阅读
- c++ - 引发编译时错误
- node.js - 使用 node.js 和 react.js 客户端启动一个 firebase 功能项目
- reactjs - 向 Graphcool 电子邮件密码模板突变添加字段
- bootstrap-4 - 重新排序 Bootstrap 4 网格
- javascript - 绘图图表不适用于 JSON 数据 PHP
- shell - 如何将 grep 的每个输出通过管道传输到另一个命令?
- react-native - 卸载 expo sdk 并改为设置 firebase
- mixins - pugjs - 单选按钮检查属性作为变量
- html - Outlook 2010 电子邮件背景颜色 html/css 属性不起作用
- javascript - 无法解析 Ajax 调用错误部分中的 json 对象值