vue数据监听 -key的作用 和diff算法

20 篇文章 1 订阅

vue数据监听 -key的作用

1:数组翻转 2:数组截取 3:更新值

  • 数组变更方法,就会导致v-for更新,页面更新

​ (push,pop,shift,unshift,splice,sort,reverse)

  • 数组非变更方法,返回新数组,不会导致v-for更新,可采用覆盖数组 或this.$set

    (filter,concat,slice)

  <body>
    <div id="app">
      <ul>
        <li v-for="(val,index) in arr" :key="index">{{val}}</li>
      </ul>
      <button @click="revBtn">数组翻转</button>
      <button @click="sliceFn">截取前3个</button>
      <button @click="updateFn">更新第一个元素值</button>
    </div>
  </body>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        arr: [4, 3, 2, 1, 4, 5, 7],
      },
      methods: {
        revBtn() {
          // 数组翻转 可以让v-for更新
          this.arr.reverse()
          // console.log(this.arr)
        },
        sliceFn() {
          // 数组slice 不会造成v-for更新
          // slice不会改变原数组
          // this.arr.slice(0, 3)
          // console.log(this.arr)

          // 解决v-for更新,覆盖原始数组
          let newArr = this.arr.slice(0, 3)
          this.arr = newArr
        },
        updateFn() {
          // 更新某个值的时候  v-for是监测不到的
          this.arr[0] = 1999

          // 解决  this.$set
          // 参数1  更新目标结构(对象/数组)
          // 参数2  更新位置
          // 参数3  更新值

          this.$set(this.arr, 0, 1999)
        },
      },
    })
  </script>
v-for如何更新DOM呢

真实DOM

document对象上,渲染到浏览器上显示的标签

在这里插入图片描述

虚拟DOM

本质是保存节点信息 ,属性和内容的一个js对象

在这里插入图片描述

内存中虚拟dom比较

内存中比较变化的部分,然后给真实DOM打补丁(更新)

在这里插入图片描述

虚拟DOM好处

提高DOM更新的性能,不频繁操作真实的DOM,在内存中找到变化的部分,更新真实的DOM(打补丁)

diff算法

diff算法是通过同级比较  来比较新旧虚拟dom
根元素变化   删除重新建立整个dom树
根元素未变  属性改变   DOM复用 只更新属性
同级比较,根元素变化-整个dom树删除重建

同级比较,根元素不变-属性改变 更新属性

在这里插入图片描述

标签内子标签/内容改变

diff分两种情况比较

1:无key 就地更新

2:有key按照key比较

key值要求:唯一不重复得字符串或者数值

key使用:有id用id,无id用索引

key得好处:配合虚拟DOM提高更新性能

无key

从第二个往后更新内容–性能不高
在这里插入图片描述

有key,值为索引

有key属性,基于key的来比较新旧虚拟dom。移除key不存在元素

有key,值唯一不重复的字符串或数字

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值