无法在状态最初更改时使用产品设置本地存储

unable to set localstorage with product as the state initially changes

我正在从事电子商务项目,我目前面临一个问题,当用户点击添加到购物车按钮时,代码 setCart([...cart,item])运行是因为购物车的初始状态是空数组,如 const [cart,setCart] = useState([]) 因此当我尝试将其保存在 localstorage 它给了我空数组,然后开始在第二个数组中保存数据

代码:

  const [cartValue,setCartValue] = useState(0)
   
  const [cart,setCart] = useState([])


  const cartValueIncreaserandSetter = (item) =>{

    setCart([...cart,item])
  setCartValue(cartValue+1)
localStorage.setItem("items",JSON.stringify(cart))

  }

我希望 localstorage 立即保存添加的第一个项目,但 localstorage 在第一次点击添加到购物车时给出 [] 数组

发生这种情况是因为 useState 挂钩是异步的。

尝试使用现有的购物车并附加商品(作为参数),如下所示:

localStorage.setItem("items",JSON.stringify([...cart,item]))

当你的代码有副作用时(当你操作本地存储时就是这种情况)你应该使用 useEffect 钩子。

我建议你像这样重写你的代码:

const [cartValue,setCartValue] = useState(0)
const [cart,setCart] = useState([])

const cartValueIncreaserandSetter = (item) => {
  setCart([...cart, item])
  setCartValue(cartValue+1)
}

useEffect(() => {
  localStorage.setItem("items",JSON.stringify(cart))
}, [cart]);
useEffect(() => {
  if (cart.length > 0) localStorage.setItem("items", JSON.stringify(cart));
}, [cart]);