vue.js响应式原理
Posted Forgrt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue.js响应式原理相关的知识,希望对你有一定的参考价值。
Vue.js 一个MVVM的框架,在这个框架里面有一些很不错的功能,其中就有它的“响应式系统”, 比如你在页面上绑定一个变量,你在函数里面改变了,页面就立刻呈现了出来.
(没法通过一张图片放上来)
在 observer 的过程中会注册 get 方法,该方法用来进行「依赖收集」。在它的闭包中会有一个 Dep 对象,这个对象用来存放 Watcher 对象的实例。其实「依赖收集」的过程就是把 Watcher 实例存放到对应的 Dep 对象中去。get 方法可以让当前的 Watcher 对象(Dep.target)存放到它的 subs 中(addSub)方法,在数据变化时,set 会调用 Dep 对象的 notify 方法通知它内部所有的 Watcher 对象进行视图更新。
这是 Object.defineProperty 的 set/get 方法处理的事情,那么「依赖收集」的前提条件还有两个:
触发 get 方法;
新建一个 Watcher 对象。
这个我们在 Vue 的构造类中处理。新建一个 Watcher 对象只需要 new 出来,这时候 Dep.target 已经指向了这个 new 出来的 Watcher 对象来。而触发 get 方法也很简单,实际上只要把 render function 进行渲染,那么其中的依赖的对象都会被「读取」,这里我们通过打印来模拟这个过程,读取 test 来触发 get 进行「依赖收集」。
视频演示:
以上是关于vue.js响应式原理的主要内容,如果未能解决你的问题,请参考以下文章