NextJS localStorage 和购物车上下文

NextJS localStorage and Context of Shopping Cart

我正在开发购物车系统,问题是,当我将产品添加到购物车时,它在上下文和 localStorage 中工作;但是,当我刷新时,数据消失了。

export const DataContext = createContext();

export const DataProvider = ({ children }) => {
  const [cart, setCart] = useState([]);
  const [state, dispatch] = useReducer(AppReducer, cart);

  useEffect(() => {
    const cartData = JSON.parse(localStorage.getItem("cart"));
    if (cartData) {
      setCart(cartData);
    }
  }, []);

  useEffect(() => {
    localStorage.setItem("cart", JSON.stringify(cart));

    // Cookies.set("cart", cart, { expires: 1 / 24 });
    // let products = Cookies.get("cart");
    // console.log(products);
  }, [cart]);

  const addToCart = (newProduct) => {
    setCart((prev) => [...prev, newProduct]);
  };

  return (
    <DataContext.Provider value={{ cart, setCart, addToCart }}>
      {children}
    </DataContext.Provider>
  );
};

然后我只需要在我的产品详细信息页面中导入 addToCart 函数并将产品作为参数。

在 Next.JS 中处理这个比普通的 React 差很​​多。我很高兴知道我做错了什么。

当您重新加载页面时,您的本地存储已经被写入。试试下面的方法来防止初始化时在本地存储中设置项目。

  const initialState = [];
  const [cart, setCart] = useState(initialState);

  useEffect(() => {
    const cartData = JSON.parse(localStorage.getItem("cart"));
    if (cartData) {
      setCart(cartData);
    }
  }, []);

  useEffect(() => {
    if (cart !== initialState) {
      localStorage.setItem("cart", JSON.stringify(cart));
    }
  }, [cart]);