码迷,mamicode.com
首页 > 其他好文 > 详细

Vue v-for指令添加key指令的理解

时间:2020-12-31 11:50:19      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:head   变量   nbsp   compute   理解   更新   model   port   delete   

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="./vue.js"></script>
  </head>
  <body>
    <div id="app">
      <div>
        <label for="#">ID</label>
        <input type="text" placeholder="输入ID" v-model="id" />
        <label for="#">NAME</label>
        <input type="text" placeholder="输入NAME" v-model="name" />
        <button @click="add">添加</button>
      </div>
      <p v-for="(user,i) in users" :key="user.id">
        <input type="checkbox" /> id={{user.id}} name={{user.name}}
      </p>
      <hr />
      <button @click="deleteOne">删除元素</button>
      <span v-for="(data,i) in arr" :key="i">{{data}}</span>
    </div>
    <script>
      let vm = new Vue({
        el: "#app",
        data: {
          id: "",
          name: "",
          users: [
            { id: 10, name: "小明1" },
            { id: 11, name: "小明2" },
            { id: 12, name: "小明3" },
          ],
          arr: [1, 2, 3, 4, 5],
        },
        methods: {
          add() {
            this.users.unshift({ id: this.id, name: this.name });
          },
          deleteOne() {
            this.arr.splice(3, 1);
          },
        },
        computed: {},
      });
      /*
      v-for 为什么要加 key?
      1. 虚拟DOM。
      Vue渲染为什么比纯JS渲染DOM效率要高?
      因为JS渲染DOM,当数据改变的时候,JS要把所有数据再重新渲染一遍。
      比如:[1,2,3,4,5],当删除3这个数据的时候,js会重新把整个数组再重新渲染一遍。而Vue只会针对性的渲染改变了的元素,而数据没有发生变化的元素,Vue是不会进行重复加载的。所以说,vue减少了DOM的操作次数。

 

      Vue为什么渲染效率高呢?
      Vue通过对比新旧两个虚拟DOM的方式,最终判断出来哪些节点发生了变化,最终将变化了的虚拟DOM节点,更新到真实DOM上。
      1. 第一次加载组件模板的时候,Vue会将这个组件模板转化成虚拟DOM树对象,保存到一个js变量中,这个模板需要加载什么数据,此时的虚拟DOM都会记录下来。
      2. 当后续数据发生改变的时候,此时Vue会根据最新的数据及组件模板再生成一个虚拟DOM树对象,保存到另外一个js变量中,接下来将这个新的虚拟DOM对象和上一次的旧的虚拟DOM进行对比,Vue会记录内容发生变化的节点,最终,将变化的节点内容,更新到真实DOM中去。

 

      Vue内在的重用机制,再对比相同标签的时候,如果不加key,Vue会就地重用相同的标签元素。

 

      v-for中的key能否使用 数据的索引 作为Key值?
      看情况,只要能保证 索引值 是唯一的,就可以使用索引作为key值。
      */
    </script>
  </body>
</html>
 
效果如下:
技术图片

 

 

Vue v-for指令添加key指令的理解

标签:head   变量   nbsp   compute   理解   更新   model   port   delete   

原文地址:https://www.cnblogs.com/yangcaicai/p/14191653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!