javascript - 无法在 localStorage 中保存超过 2 个项目
问题描述
我正在尝试将本地存储中的项目保存为对象数组。起初它工作得很好,并根据我的需要将第一个元素存储在本地存储中,但我不能存储多个元素。
这是启动本地存储的代码块。
在这个块中,我从不同的组件接收一个项目作为对象并为其分配一个 ID。之后,我更新状态并存储这个对象。
const saveEdit = (obj) =>{
const text = obj.article;
const id = Date.now().toString(36) + Math.random().toString(36).substr(2);
let article = { id: id, text:text}
setSavedArticles([...savedArticles,article])
localStorage.setItem('article', JSON.stringify(savedArticles));
}
- 第一项作为文章存储:[{item}]
- 我想要做的是每次收到一个新项目作为文章时更新本地存储:[{item},{item} ...]
我正在使用 onClick 功能从另一个组件发送信息。
<button
onClick={() => saveEdit({
article: textArea.current.value
})}
className="button mt-4">
Save
</button>
解决方案
问题是在 React 中设置状态是一个异步过程。这意味着,您保存已保存文章的先前值,而不是更新的值。您应该像这样创建一个新变量:
const newArticles = [...savedArticles,article]
然后更新状态和本地存储:
setSavedArticles(newArticles)
localStorage.setItem('article', JSON.stringify(newArticles));
推荐阅读
- python - 找到暗淡为 4 的数组。估计器预期 <= 2
- python - Python舍入错误和导入十进制不起作用
- wolfram-mathematica - 将两个stl文件合并为一个对象
- assembly - 长度反汇编程序和缺少扩展
- javascript - forEach 循环行为异常,调用函数值记录在循环结束而不是在循环期间
- webgl - WebGL - 从文件中读取顶点和索引时画布为空白
- react-native - 将 ImageBackground 添加到 React Native 登录屏幕
- r - 如何从现有数据集创建新数据文件以加载到 Rattle?
- javascript - 在窗口卸载时存储 Cookie (Window.Variable)
- android - Android - 主应用程序的产品风格与依赖模块不同的问题