【发布时间】:2020-08-20 16:40:42
【问题描述】:
我正在尝试将产品从购物车保存到本地存储,但在页面刷新时它并没有像想象的那样工作。当我刷新页面时,产品在购物车中,但一旦我添加新项目,它就会被删除。此外,删除产品会删除所有内容,而不是使用本地存储时的特定内容。这是我尝试过的:
在App.tsx设置数组中
const [productList, dispatch] = useReducer((state: any, action: any) => {
switch (action.type) {
case "ADD_ITEM":
const noDoubleItems = state.filter((item: any) => item.id !== action.payload.id);
localStorage.setItem("cart",JSON.stringify([...noDoubleItems, action.payload]));
return [...noDoubleItems, action.payload];
case "DELETE_ITEM":
localStorage.setItem("cart", JSON.stringify(state));
return state.filter((item: any) => item.id !== action.payload.id);
default:
return state;
}
}, []);
在Cart.tsx 中获取数组
const storageCart = localStorage.getItem("cart");
const storageCartObject = storageCart && JSON.parse(storageCart);
这里是代码沙箱:https://codesandbox.io/s/flamboyant-torvalds-tevby?file=/src/components/pages/Cart.tsx:298-1026
【问题讨论】:
-
你在使用 Redux 吗?
-
Reducer 函数(在 redux 或其他普通反应中)should really be pure functions,这意味着它们返回一个新状态并且没有其他副作用。写入本地存储是一个副作用。
标签: reactjs local-storage