Estoy tratando de conservar el estado de los artículos en mi carrito con la ayuda del almacenamiento local. Si bien puedo guardar los artículos en el almacenamiento local cuando se agrega un artículo, el carrito no persiste cuando actualizo la página.
No sé en qué parte de este código debo implementar el código "getItem" para persistir en el carrito de estado, incluso si la página se actualiza. Cualquier ayuda sería apreciada, adjuntando los archivos de código a continuación.
ProveedorCarrito.js
import React from "react"; import CartContext from "./cart-context"; import { useReducer, useEffect } from "react"; const defaultCartState = { items: [], totalAmount: 0, }; const cartReducer = (state, action) => { let updatedItem; let updatedItems; if (action.type === "ADD_CART_ITEM") { updatedItem = { ...action.item }; updatedItems = state.items.concat(action.item); } const newTotalAmount = state.totalAmount + action.item.price; const localData = localStorage.getItem("cart"); return { items: updatedItems, totalAmount: newTotalAmount, }; }; export default function CartProvider(props) { const [cartState, dispatchCartAction] = useReducer( cartReducer, defaultCartState ); const addItemToCartHandler = (item) => { dispatchCartAction({ type: "ADD_CART_ITEM", item: item }); }; const removeItemFromCartHandler = (id) => { dispatchCartAction({ type: "REMOVE_CART_ITEM", id: id }); }; const cartContext = { items: cartState.items, totalAmount: cartState.totalAmount, addItem: addItemToCartHandler, removeItem: removeItemFromCartHandler, }; useEffect(() => { localStorage.setItem("cart", JSON.stringify(cartState.items)); }, [cartState.items]); return ( <CartContext.Provider value={cartContext}> {props.children} </CartContext.Provider> ); }declare useEffect sin dependencia, por lo que solo se ejecutará una vez a través del ciclo de vida del componente en ese momento, puede verificar si existen datos en el almacenamiento local de lo que lo configuró, verifique el ejemplo a continuación.
useEffect(() => { let items=JSON.parse(localStorage.getItem("cart")); if(items){ addItemToCartHandler (items) } }, []);