v-for为什么要加key

简介: v-for为什么要加key

@TOC

本节内容:在日常开发中,经常会使用v-for进行遍历,但是每次使用其时,都要被强制的加上key,那么key究竟起着什么样的作用?话不多说,我们先看一个案例

一、案例

源码:

<div>
  <input type="text" v-model='name'>
  <button @click='add'>添加</button>
</div>
<ul>
  <li v-for='(item, i) in nameList' :key='item.id'>
    <input type="checkbox"> {
   
   {
   
   item.name}}
  </li>
</ul>
</div>
<script>
const HelloVueApp = {
   
   
  components: {
   
   
    getTitleComponent,
    toDoList
  },
  data() {
   
   
    return {
   
   
      bookTitle: '',
      selectVal: '',

      nameList: [
        {
   
    id: 1, name: '张三' },
        {
   
    id: 2, name: '李四' },
        {
   
    id: 3, name: '王五' }
      ],
      name: '',
      newId: 3
    }
  },
  methods: {
   
   
    add () {
   
   
        // 注意是 unshift 添加,将在头部添加元素
      this.nameList.unshift({
   
   id: ++this.newId, name: this.name})
      this.name = ''
    }
  }
}

Vue.createApp(HelloVueApp).mount('#app')
</script>

1、不加key值时

在这里插入图片描述

2、加key值时

在这里插入图片描述

  • 通过以上两个结果我们可以看出,当我们没加key值时,没有 key 属性,状态默认绑定的是位置;加上key值有 key 时,状态根据key的值绑定到了相应的数组元素上
  • vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 ,key的作用主要是为了高效的更新虚拟DOM。
  • 由于key的唯一性,尽量把id作为key值。index索引的话因为并不具有唯一性,不能作为key值
    Vue中这样说道:维护状态,当 Vue 正在更新使用 v-for 渲染的元素列表时,它默认使用“就地更新”的策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染。
    在Key的语法当中我们得知:特殊 attribute 主要用做 Vue 的虚拟 DOM 算法的提示,以在比对新旧节点组时辨识 VNodes。如果不使用 key,Vue 会使用一种算法来最小化元素的移动并且尽可能尝试就地修改/复用相同类型元素。而使用 key 时,它会基于 key 的顺序变化重新排列元素,并且那些使用了已经不存在的 key 的元素将会被移除/销毁。
  • 一张图带你更深入的理解,如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。
    在这里插入图片描述
相关文章
|
3月前
|
小程序
小程序for循环中key值的作用?
小程序for循环中key值的作用?
|
2月前
|
存储 NoSQL Redis
Redis第七弹-Set与ZSET基本操作,Set(集合特点)SADD key member(注意这个key,必须是你自定义名字,不能用key)​编辑SMEMBERS key-查询所有的key
Redis第七弹-Set与ZSET基本操作,Set(集合特点)SADD key member(注意这个key,必须是你自定义名字,不能用key)​编辑SMEMBERS key-查询所有的key
|
3月前
|
JavaScript 算法 索引
v-for为什么要加key
v-for为什么要加key
接口签名:参数名按ASCII码从小到大排序+Key+MD5+转大写签名
接口签名:参数名按ASCII码从小到大排序+Key+MD5+转大写签名
205 1
|
JavaScript 算法 索引
v-for中key值的作用
v-for中key值的作用
CMap如何key为字符串,值为int
CMap如何key为字符串,值为int
|
11月前
|
小程序 JavaScript 索引
小程序v-for与key值使用
小程序v-for与key值使用
138 0
|
前端开发
根据key值过滤形成新得数组
根据key值过滤形成新得数组
62 0
|
JavaScript 索引
v-for循环为什么要绑定key值
v-for循环为什么要绑定key值
95 0
|
存储 Java
从数组当做map的key引发的思考
从数组当做map的key引发的思考
131 0