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

Vue.js删除数组元素后v-for未更新视图问题求助

问题根因

你的问题核心出在v-for使用了索引作为key值:
当你删除数组中某一项时,后续所有元素的索引都会整体前移1位,Vue的diff算法通过key判断组件是否需要复用,此时Vue会认为仅删除了数组最后一项,前面的组件全部复用,而子组件的表单状态存储在自身data中,仅在beforeMount生命周期同步一次父组件传入的data,复用的组件不会重新触发初始化逻辑,就会出现数组数据正确但视图删除错误的问题。

解决步骤

1. 为每个规则项添加唯一标识

修改父组件NewTask.vue的addRule方法,给新增的规则项加全局唯一ID,这里用时间戳加随机数避免快速点击生成重复ID:

addRule() {
  const new_rule = {
    // 新增唯一ID字段
    id: `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
    type_input_text: null,
    type_input_show: null,
    rule_input_text: null,
    rule_input_show: null,
  }
  this.rules.push(new_rule)
}

2. 修改v-for的key为唯一标识

将父组件模板中v-for绑定的key从索引改为每个规则项的唯一ID:

<new-rule v-for="(item, index) in rules"
          <!-- 替换原来的JSON.stringify(index) -->
          :key="item.id"
          v-on:remove-rule="removeRule(index)"
          :data="item" :index="index"
          v-on:data-changed="dataChanged"
          class="mb-2"/>

可选优化(非必须)

你现有代码中dataChanged、removeRule方法里的this.rules = rules可以删掉,splice是Vue支持监听的数组变异方法,直接操作就可以触发响应式更新,不需要重新赋值数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:04