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

如何使用React Hooks删除状态中嵌套数组内的指定元素

代码问题分析

  • 状态更新回调中直接引用外部的myCheeses而非回调入参prev,容易因闭包拿到旧状态,导致更新不符合预期
  • 返回的新状态结构完全错误:原状态顶层包含id、title、items三个字段,你返回的对象既丢失了顶层字段,还把过滤后的单个变体数组直接赋值给了顶层items字段,和原数据结构不匹配

正确实现

const removeMyCheese = (variantID, itemindx) => {
  setMyCheeses((prev) => {
    const newItems = prev.items.map((item, idx) => {
      // 仅修改对应下标的奶酪条目
      if (idx === itemindx) {
        return {
          ...item,
          // 过滤删除目标变体
          variants: item.variants.filter(v => v.id !== variantID)
        }
      }
      // 其余条目保持不变
      return item
    })
    // 返回和原结构完全一致的新状态
    return {
      ...prev,
      items: newItems
    }
  })
}

实现说明

React状态更新要求不可变修改,嵌套结构需要逐层复制修改:遍历所有奶酪条目,匹配到目标下标条目时,复制该条目并更新其变体数组,其余条目保持原样,最后拼装为和原结构完全一致的新状态对象即可完成更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:21:02