美文网首页
vue为什么不能检测数组的变化

vue为什么不能检测数组的变化

作者: janezhang | 来源:发表于2020-04-04 17:13 被阅读0次

https://www.cnblogs.com/youhong/p/12173354.html

Vue2.0对于响应式数据的实现有一些不足:

  • 无法检测数组/对象的新增
  • 无法检测通过索引改变数组的操作。

Vue2.0中响应式数据是通过Object.defineProperty实现,因此无法检测数组/对象的新增,但为什么无法检测到通过索引改变数组的操作呢?也是因为Object.defineProperty的原因么?
官方文档中对于这两点都是简要的概括为“由于JavaScript的限制”无法实现,而Object.defineProperty是实现检测数据改变的方案,那这个限制是指Object.defineProperty吗?

答案是我们可以简单的总结一下结论。

Object.defineProperty 在数组中的表现和在对象中的表现是一致的,数组的索引就可以看做是对象中的 key 。
  • 通过索引访问或设置对应元素的值时,可以触发 getter 和 setter 方法
  • 通过 push 或 unshift 会增加索引,对于新增加的属性,需要再手动初始化才能被 observe 。
  • 通过 pop 或 shift 删除元素,会删除并更新索引,也会触发 setter 和 getter 方法。
所以, Object.defineProperty 是有监控数组下标变化的能力的,只是vue2.x放弃了这个特性。

为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)

相关文章

网友评论

      本文标题:vue为什么不能检测数组的变化

      本文链接:https://www.haomeiwen.com/subject/nlijphtx.html