javascript - 为什么不总是使用索引作为 vue.js for 循环中的键?

标签 javascript indexing vue.js key v-for

我已经在几个项目中使用了 vue.js,并且我一直在使用索引作为 for 循环中的键

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

...并开始怀疑这是否存在问题,因为示例通常使用项目的 ID。

<div v-for="(item, index) in items" :key="item.ID"></div>

最佳答案

因为数组是可变的。如果将项目添加到数组或从数组中删除,任何给定项目的索引都可以而且将会更改。

您希望您的 key 是一个唯一值,仅标识您的唯一组件。您创建的主键总是比使用索引更好。

这是一个例子。

console.clear()

Vue.component("item", {
  props: ["value"],
  data() {
    return {
      internalValue: this.value
    }
  },
  template: `<li>Internal: {{internalValue}} Prop: {{value}}</li>`
})


new Vue({
  el: "#app",
  data: {
    items: [1, 2, 3, 4, 5]
  },
  methods: {
    addValue() {
      this.items.splice(this.items.length / 2, 0, this.items.length + 1)
    }
  }
})
<script src="https://unpkg.com/vue@2.2.6/dist/vue.js"></script>
<div id="app">
  {{items}}
  <ul>
    <item v-for="i in items" :value="i" :key="i"></item>
  </ul>
  <button @click="addValue">AddValue</button>
  <ul>
    <item v-for="(i, index) in items" :value="i" :key="index"></item>
  </ul>
</div>

请注意,单击addValue 时,顶部的列表表示数组中真正 所在的新数字;在中间。在按钮下方的第二个列表中,值表示数组中的实际位置,内部值和属性值不一致。

关于javascript - 为什么不总是使用索引作为 vue.js for 循环中的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44531510/

相关文章:

javascript - Vue.js:如何在单个文件组件中指定 Prop ?

javascript - 如何正确设置 Material-ui 中某些元素的颜色?

javascript - 递归地将对放入子列表中

javascript - 如果我使用 JQuery $.each() 迭代对象属性,是否有索引?

vue.js - default.vue Jest 中的 <nuxt/> 组件出现未知自定义元素 : - did you register the component correctly? 错误

javascript - 对象继承/导入问题

javascript - 带有灰色框的 GridLayout 预渲染 - WinJS

javascript - 仅在 Angular 服务从服务器获取数据并完成其执行后才执行某些代码块

python - 如何根据索引在多维数组中查找值

postgresql - PostgreSQL 中 UUID 类型的索引而不是主键