追踪变化

Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/settergetter/setter用户不可见,但vue能利用他们追踪依赖,在 property 被访问和修改时通知变更。

对象

Vue 无法检测 property 的添加或移除,因为此时不会触发它的setter。由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的。
vue不允许添加根级别的property,所以要为data上的对象添加新属性时,可使用:
this.$set(对象,'属性名', 属性值); 例如:this.$set(this.someObject,'b',2)
如果添加的属性有多个:
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

数组

不能直接在data中的数组添加元素,或者改变其长度,否则则不是响应式的。为什么?
在初始化的过程中没有对数组索引进行监听,这样可以避免无用的数组索引监听。
1.若需要数组的改变为响应式的,则需要使用数组相关的方法去改变数组。或者使用$set方法:
this.$set(array, index, value);
2.vue拦截了数组的原型,但是在改变数组的时候使用的是原型上的方法,可以使用数组方法去监听数组的增加或者删除。
[
'push',
'pop',
'shift',
'unshift',
'splice',
'sort',
'reverse'
]这些方法可以使data上面的数组响应式更新
不能改变原数组的方法则需要对data里面的数组重新赋值进行更新。

异步更新队列

$this.nextTick中的回调函数会在所有的DOM更新完成之后再执行。

 posted on 2020-12-08 23:24  en、  阅读(106)  评论(0)    收藏  举报