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

React useState如何给对象数组内的Todo项添加元素而不重复生成Todo副本

错误原因

你的原有代码存在两个问题,最终导致Todo分类重复:

  • 直接修改了React状态的prev对象,违反了React状态不可变的设计原则
  • 返回新数组时,先插入了修改后的Todo分类,又把整个prev数组做了展开拼接,等于Todo分类被重复插入了两次
修正后的代码

方案1:按索引修改(适合分类顺序固定的场景)

const addItem = () => {
  // 空值校验,避免添加空白无效条目
  if (!text.trim()) return
  setList((prev) => {
    // 浅拷贝原状态数组,不修改原prev
    const newList = [...prev]
    // 仅替换第一个Todo分类的内容
    newList[0] = {
      ...newList[0],
      items: [text, ...newList[0].items]
    }
    return newList
  })
  setText('')
}

方案2:按标题匹配修改(适合分类顺序可能调整的场景,兼容性更强)

const addItem = () => {
  if (!text.trim()) return
  setList((prev) => {
    // 遍历所有分类,仅修改title为Todo的分类
    return prev.map(category => {
      if (category.title === 'Todo') {
        return {
          ...category,
          items: [text, ...category.items]
        }
      }
      // 其他分类原样返回
      return category
    })
  })
  setText('')
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:06:03