javascript - LocalStorage 项目被新项目覆盖
问题描述
我正在尝试使用 LocalStorage ,以便每次添加新任务时它都会添加到本地存储中,但目前它总是会覆盖原始任务。
我有一个 LocalStorage 的包装器:
export const setLocalStorage = (item) => {
localStorage.setItem('todo', JSON.stringify(item));
}
然后我有一个导入包装器的 React 组件,我在该组件中有一个简单的表单,其中包含一个输入字段和一个按钮:
<Button onClick={(e) => { saveTodo(e) }}> Save Changes </Button>
保存待办事项功能:
constructor(props) {
super(props)
this.state = {
todo: '',
}
}
const saveLog = (e) => {
e.preventDefault();
setLocalStorage(this.state.todo);
}
现在每次我通过点击按钮执行函数时,LocalStorage 都会被新值覆盖,但我想继续添加到本地存储中
我怎样才能做到这一点?
这是我到目前为止所做的:
export const setLocalStorageItem = (todo) => {
var todoList = JSON.parse(localStorage.getItem('todo')) || [];
console.log(todoList);
todoList.push(todo)
localStorage.setItem('todo', JSON.stringify(todoList));
}
我在 localsotage 中添加了两个项目:
Storage {todo: "["hello","123"]", length: 1}
length: 1
todo: "["hello","123"]"
__proto__: Storage
所以它现在完美无缺:)
解决方案
您需要将其todo
从本地存储添加到现有阵列。像这样的东西:
export const setLocalStorage = (item) => {
const todo = JSON.parse(localStorage.getItem('todo'));
todo.push(item);
localStorage.setItem('todo', JSON.stringify(todo));
}
推荐阅读
- jmeter - 如何检查中频控制器的时差?
- python - 具有多个键值的字典到数据框
- node.js - ApolloClient GraphQL 错误:第 1:23 行在字符“_”处没有可行的替代方案
- python - 确定序列是否递增?(Python)
- java - 为什么我的应用无法在旧设备上运行?
- java - apache fop 嵌入式文件声明中的 Xslt 变量
- c++ - 为什么即使对于“写入时复制”的 const 成员函数也返回代理类?
- ansible - ansible 与 Ubuntu 18.04 兼容吗?
- sql-server - 与团队成员共享元数据库仪表板
- python - 将 Python 2.7 ZIP 破解器“现代化”为 Python 3.7