1. 响应式处理过程流程图
2. 响应式处理过程概述
- 响应式处理整体过程为initState() => initData() => observe()
- 其中observe是响应式处理的入口,通过该方法为data对象转化为响应式对象
- observe方法接收的是对象且该对象不是响应式时,会为该对象创建一个observe对象,会调用Observer类
Observer类中判断该value是数组还是对象,进行不同的处理
- 数组的响应化处理,是重写push,pop,sort等会修改原数组的方法,调用对应的notify.然后遍历数组中的成员,判断其类型决定是否调用observe方法
- 对象的响应化处理,会调用walk方法,遍历对象中的每个属性,调用defineReactive
- 数组的响应化处理,是重写push,pop,sort等会修改原数组的方法,调用对应的notify.然后遍历数组中的成员,判断其类型决定是否调用observe方法
defineReactive的核心是为每一个属性定义getter和setter,getter中收集依赖,setter中派发更新,即调用dep.notify
- dep.notify()会调用watcher的update()方法。如果该watcher未被处理,会被添加到queue队列中,并调用flushSchedulerQueue()方法,该方法会触发对应的钩子函数以及调用watcher.run()更新视图