javascript - 带有 redux 的本地存储无法按预期工作
问题描述
我是 JavaScript 的初学者,我正在使用 React 和 Redux 开发电子商务测试应用程序,我需要在购物车上保存数据(我为此使用本地存储)。当我将商品添加到购物车时,它们存储在本地存储中,当我刷新页面时,数据仍保留在本地存储中。当我在页面刷新后尝试将其他项目添加到购物车时出现问题,而不是添加到最初存在的项目中,它从零开始添加。
这是一个代码片段:
我的 REDUX 行动
const arr = [];
export const addItem = (itemsAddedToCart) => {
const id = Math.random();
arr.push({ ...itemsAddedToCart, id: id });
const test = JSON.stringify(arr);
localStorage.setItem("test", test);
return {
type: "ADD_ITEM",
payload: { ...itemsAddedToCart, id: id },
};
};
PS对不起我的英语不好
解决方案
看起来localStorage.setItem()
会覆盖本地存储中已有的内容。
要在不删除旧条目的情况下更新本地存储中的内容,您可以先读取本地存储内容,合并新项目并写入存储。
const arr = [];
export const addItem = (itemsAddedToCart) => {
const id = Math.random();
arr.push({ ...itemsAddedToCart, id: id });
//get the new elements' ids to a set
const ids = new Set(arr.map(d => d.id));
//read stored items from storage and join them to arr
const storedItems = localStorage.getItem("test");
if(storedItems) {
const storedItemsParsed = JSON.parse(storedItems);
// if the item is not in new items, add them to arr
arr = [..arr, ...storedItemsParsed.filter(item=> !ids.has(item.id)) ]
}
const test = JSON.stringify(arr);
localStorage.setItem("test", test);
return {
type: "ADD_ITEM",
payload: { ...itemsAddedToCart, id: id },
};
};
推荐阅读
- javascript - 如何访问脚本内部的 json 变量而不是使用 $.getJSON 来获取外部 json?
- java - 将 for 循环重构为流
- asp.net-core - ASP.NET 剃须刀页面的代码文档注释?
- sql - 如何通过查询“关联”分组中的列?
- spring - Thorntail - WildFly Elytron 安全远程连接获取身份验证失败:不支持服务器提供的任何机制
- javascript - 从 kotlin 访问 js 变量
- tarantool - 连接tarantool墨盒应用程序的默认密码是什么
- python - 如何确定最佳的随机状态值和类标签对?
- ruby-on-rails - TRAVIS CI:`find_spec_for_exe':找不到带有可执行包的 gem bundler (>= 0.a) (Gem::GemNotFoundException)
- python - 有没有更快的方法来运行基于 pandas 应用函数的代码?