为什么Vue不能检测对象属性的添加或删除也不能检测数组元素直接赋值或改变length?...

1、为什么不能检测数组元素直接赋值或改变length?

官方文档已经说的很清楚了,如果你还不能理解,就请看下图

简单点说如果监测得属性是值类型,当值改变就会触发set;如果是引用类型,只有当引用改变得时候才会触发set;

2、为什么不能检测动态添加得对象属性?

因为defineProperty是对属性list进行监测,添加name属性后list的引用没变所以当然不会触发set啊。

3、咋办呢?

  • 1)、针对数组,vue提供了变异方法(push、pop、shift、unshift、sort、reverse、splice),为什么要提供呢,因为Array.prototype上的方法不会改变属性的引用,所以不会更新视图。Vue的处理如下图
    其实不是啥高大上的东西,就是通过调用变异方法的时候手动去通知更新视图而已。
  • 2)、Vue.set全局API,原理很简单,看下图源码
    这里就不详细介绍了,很简单,如果是数组就调用Vue定义的变异方法,如果是对象就用defineProperty定义这个属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值