类别:vue / 日期:2023-02-21 / 浏览:251 / 评论:0

流程总结如下:
1. 当组件初始化的时候, computed 和 data 会分别建⽴各⾃的响应系统, Observer 遍历 data中每个属性设置 get/set 数据拦截
2. 初始化 computed 会调⽤ initComputed 函数
1. 注册⼀个 watcher 实例,并在内实例化⼀个 Dep 消息订阅器⽤作后续收集依赖(⽐如渲染函数的 watcher 或者其他观察该计算属性变化的 watcher )
2. 调⽤计算属性时会触发其 Object.defineProperty 的 get 访问器函数
3. 调⽤ watcher.depend() ⽅法向⾃身的消息订阅器 dep 的 subs 中添加其他属性的watcher
4. 调⽤ watcher 的 evaluate ⽅法(进⽽调⽤ watcher 的 get ⽅法)让⾃身成为其他watcher 的消息订阅器的订阅者,⾸先将 watcher 赋给 Dep.target ,然后执⾏ getter求值函数,当访问求值函数⾥⾯的属性(⽐如来⾃ data 、 props 或其他 computed )时,会同样触发它们的 get 访问器函数从⽽将该计算属性的 watcher 添加到求值函数中属性的watcher 的消息订阅器 dep 中,当这些操作完成,最后关闭 Dep.target 赋为 null 并返回求值函数结果。
3. 当某个属性发⽣变化,触发 set 拦截函数,然后调⽤⾃身消息订阅器 dep 的 notify ⽅法,遍历当前 dep 中保存着所有订阅者 wathcer 的 subs 数组,并逐个调⽤ watcher 的 update ⽅法,完成响应更新。
版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。

«    2023年11月    »
12345
6789101112
13141516171819
20212223242526
27282930

最新留言