- 如何实现数据变化影响视图的更新
vue2 通过object.defineProperty对所有data中定义属性递归的自定义了getter和setter。
getter方法中收集被依赖项,setter中触发getter中收集到的依赖内容通知视图更新 -
data中没有被视图引用到的属性变化为什么不会导致制图更新
初始化时创建了一个更新视图的watcherWatcher
初始化渲染Watcher.png
watcher的构造器会根据this.lazy属性判断是否触发get,get方法内会触发watcher的回调
Watcher内构造器lazy默认false.png
get方法开始执行时设置当前watcher到Dep.target属性,执行结束是还原Dep.target属性
get方法会设置当前Dep.target.png
自定义的getter方法内会根据当前Dep.target值是否存在决定是否收集被依赖项,所以初始化时watcher传入的updateComponent方法是视图渲染,视图渲染时所有被访问到的属性都会被收集
getter收集属性是会判断Dep.target是否存在.png
2023-02-27
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- [TOC] Vue 学习笔记 Vue 源码解析 - 主线流程 Vue 源码解析 - 模板编译 Vue 源码解析 -...