-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
想知道computed实现原理 #51
Comments
具体源码的位置是在
其中this.getter就是computed对应key的回调函数,执行了 return this.firstname + this.lastname 当 lastname 更新时,触发dep.notify(),此时就进入了update过程,update过程其实就是将初始化得到语法树转换成虚拟dom的过程,这个过程会读取fullname的value, 又会重新触发computedGetter过程,而这个过程会依次读取this.firstname 和 this.lastname的value 并返回最终的结果,得到结果然后生成新的虚拟dom,再进入diff流程,最终更新视图。 这里再插一句: computed 会对应一个内部watcher, data 对应一个更新watcher,data每一个key对应一个dep,如果key对应的value是object,会递归defineReactive,也就是说每一层obj的key都会对应一个dep。当更改data中的某一项数据时,会触发dep.notify, 简单理解,有问题欢迎沟通交流。 |
大佬, 能解答一下,为什么 Object.defineProperty 劫持一下 computed 中的属性,就可以实现 computed 的功能呢,
firstname 或 lastname 更新怎么触发的 fullname, 这一块不是很明白, 为什么 lastname 更新时 set 方法里的 dep.notify(); 这个 dep 是 跟 fullname 相关的。
大佬方便微信或其他聊天工具联系一下吗
The text was updated successfully, but these errors were encountered: