vue中data的数组怎么操作会重新渲染页面,怎么操作不会渲染页面

目录

会渲染页面的操作

这是为什么呢

不会导致页面渲染的操作

 通过索引值改变数组导致页面不渲染的解决方法

this.$set的实现原理


会渲染页面的操作

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()
  • vue2.0还增加个方法可以观测Vue.set(items, indexOfItem, newValue)
  • Vue.set()的用法
  • filter(), concat(), slice() 。这些不会改变原始数组,但总是返回一个新数组。当用这个新数组替换老数组时同样会导致页面更新

这是为什么呢

vue2对于数组中的这些原型对象上的方法进行了重新的封装,对于数组调用这些方法都会使用dep.notify()通知视图更新。并且如果方法是push、unshift和splice则会对插入的数据再次进行观测

不会导致页面渲染的操作

  • 利用索引值直接改变一个值时,例如:this.arr[0] = 100。此时data中的arr[0]会变成100,但是不会渲染到页面上
  • 当你修改数组的长度时,例如: this.arr.length = 100

 注意注意:
arr=[{a:1},2]
arr[0].a = 100
这个时候会触发页面重新渲染,因为{a:1}是通过对象的方式进行的数据劫持,也就是说{a:1}有observer

 通过索引值改变数组导致页面不渲染的解决方法

	this.$set(this.arr, 0, 100)

this.$set的实现原理

  • 如果目标是数组,直接使用数组的 splice 方法触发相应式;
  • 如果目标是对象,会先判读属性是否存在、对象是否是响应式,最终如果要对属性进行响应式处理,则是通过调用 defineReactive 方法进行响应式处理( defineReactive 方法就是 Vue 在初始化对象时,给对象属性采用 Object.defineProperty 动态添加 getter 和 setter 的功能所调用的方法)
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_揽

苦der程序员敲代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值