You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何更新LocalStorage对象中的多个状态?

解决方案

问题出在你更新jobExperience时误用了push方法——push会修改原数组,并且返回的是数组的新长度(数字),而非新数组。当你同时更新两个字段时,jobExperience会被赋值成这个数字,后续操作自然会导致数组元素异常。

正确的做法是通过不可变的方式生成新数组,同时更新两个字段:

// 函数式更新的正确写法
setData(prev => ({
  ...prev, // 展开原状态的其他字段
  jobExperience: [...prev.jobExperience, {}], // 用扩展运算符生成新数组,添加空对象
  currentEditedJob: prev.currentEditedJob + 1
}))

或者用concat方法(同样返回新数组,不修改原数组):

setData(prev => ({
  ...prev,
  jobExperience: prev.jobExperience.concat({}),
  currentEditedJob: prev.currentEditedJob + 1
}))

核心要点:

  • 永远不要直接修改useLocalStorage返回的原状态对象/数组,必须返回全新的引用
  • 数组更新时,优先用扩展运算符[...arr, newItem]或concat,避免用push/pop这类会修改原数组的方法

内容的提问来源于stack exchange,提问作者Ajayi Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:14:54