深入响应式原理

vue的数据模型:js对象(当进行修改时,视图层进行更新)

工作原理总结如下:
    (图示)
    ![图片描述][1]

1. 追踪变化
    作为 data 选项,普通的 JavaScript 对象传入 Vue 实例,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter
    1)(用户不可见,但是在内部它们让 Vue 能够追踪依赖,在属性被访问和修改时通知变更)
    2)(每个组件实例都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据属性记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染)
    
 2.检测变化
     Vue 无法检测到对象属性的添加或删除;
     注:
     1)Vue 会在初始化实例时对属性执行 getter/setter 转化,所以**属性必须在 data 对象上存在才能让 Vue 将它转换为响应式的**
     2)Vue 不允许动态添加根级别的响应式属性
         **Vue.set(object, propertyName, value)** 方法可以向嵌套对象添加响应式属性
         还可以使用 **vm.$set** 实例方法,这也是全局 Vue.set 方法的别名
 3.声明响应式属性
     注:Vue 不允许动态添加根级响应式属性,必须**在初始化实例前声明所有根级响应式属性**
    原文作者:hammeraaa
    原文地址: https://segmentfault.com/a/1190000019311361
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞