发现vue3 的 v-for 数组 的一个小问题

作者: 自然框架 | 来源:发表于2021-08-21 14:15 被阅读0次

正常情况

直接上代码

const a = reactive([1, 2, 3])
setTimeout(() => {
  a[1] = 3
  a[2] = 2
}, 2000)

很简单,定义一个响应性的数组,然后在模板里面循环。

<div v-for="(item, index) in a" :key="item">
  {{item}}
</div>

:key 使用 item 或者 index 都是可以相应的,这个很正常,但是直到使用 el-table 的 el-table-column。

意料之外的现象

我比较懒,不想一个一个的设置 <el-table-column>,于是做了个数组来v-for。
然后,当然是没有问题,实现了我想要的效果。

但是当我加上拖拽(修改th的前后顺序)的功能后却发现,不响应了。https://www.jianshu.com/p/6ee79eeb5bcc

<el-table-column
      v-for="(id, index) in colOrder"
      :colId="id"
      :column-key="id"
      :key="'grid_list_' + id"
      :fixed="id < fixedIndex"
      :prop="itemMeta[id].colName"
      :label="itemMeta[id].label"
      :width="itemMeta[id].width"
      :min-width="50"
      :align="itemMeta[id].align"
      :header-align="itemMeta[id]['header-align']"
      :filter-multiple="false"
      :show-overflow-tooltip="true"
      :formatter="myformatter"
    >
    </el-table-column>

注意看这里 :key="'grid_list_' + id" key的设置。
一开始设置为id,结果发现直接修改数组后,table 没有变化,也就是 th 的顺序没有改变。

这是几天前的事情了,今天又想起研究了一下,发现把 key 改成 :key="'grid_list_' + index",居然就能响应了。

比较无语,以前听说 v-for 的时候,key 尽量不要用 index,所以我特意用的id,结果没想到会这样。

原理没想明白,大概是vue内部判断的问题,认为没有变化无需更新吧。

拖拽

这下不需要用别扭的写法实现拖拽后排序了。

相关文章

  • 发现vue3 的 v-for 数组 的一个小问题

    正常情况 直接上代码 很简单,定义一个响应性的数组,然后在模板里面循环。 :key 使用 item 或者 inde...

  • VUE复习笔记8(列表渲染)

    用 v-for 把一个数组 对应为 一组元素 我们使用 v-for 指令根据数组的列表来进行渲染。v-for指令需...

  • vue笔记-v-for指令学习(五)

    v-for循环普通数组 v-for循环对象数组 v-for循环对象属性 v-for迭代数字 注意点:2.2.0+后...

  • 【Vue】列表渲染与事件处理

    1. 列表渲染 使用v-for指令基于数组或对象来渲染一个列表 使用v-for迭代或遍历一个数组 使用v-for迭...

  • 列表渲染

    用 v-for 把一个数组对应为一组元素 我们用 v-for 指令根据一组数组的选项列表进行渲染。v-for 指令...

  • 07-vue.js-列表渲染

    1.用 v-for 把一个数组对应为一组元素 我们用 v-for 指令根据一组数组的选项列表进行渲染。v-for ...

  • 2020-02-05

    v-for循环对象数组 v-for 循环对象

  • 2018-09-10第一节vue

    v-for循环1,用vue输出内容 2,用v-for循环数组或对象 3,用v-for循环输出数组对象

  • Vue 循环渲染

    v-for指令的使用 在 Vue 中,可以使用 v-for 指令绑定数据到数组来渲染一个列表。 使用 v-for ...

  • Vue v-for循环

    v-for 可以循环数组 、对象 、数组对象

网友评论

    本文标题:发现vue3 的 v-for 数组 的一个小问题

    本文链接:https://www.haomeiwen.com/subject/nxpfiltx.html