Vue源码解析-Vue异步更新过程
2020-07-10 本文已影响0人
v雪狐v
- src/core/observer/dep.js
- notify() //执行了对所有watcher对遍历
通过调用:
- notify() //执行了对所有watcher对遍历
- src/core/observer/watcher.js
- update() 方法
如果是异步 执行:
- update() 方法
- src/core /observer/watcher.js
- queueWatcher()
- 获取所有watcher唯一id
- 判断watcher是否入队,去重。
- 如果watcher为同步直接执行flushSchedulerQueue();否则nextTick(flushSchedulerQueue)
- queueWatcher()
- src/core/util/next-tick.js
- nextTick() 内调用了
timerFunc() 来判断当前环境的异步方法
异步选择顺序为: Promise、MutationObserver、setImmediate 、setTimeout
flushCallbacks() //存储用户传入回调
- nextTick() 内调用了
- src/core /observer/scheduler.js
- flushSchedulerQueue() 执行了队列排序,遍历队列中的watcher实例,并调用run()方法