>调度程序(core/observer/scheduler.js);
2个队列对象
userQueue: 使用vm.$watch使用;
queue: 内部component组建重新render使用;
通过watcher.user来判断是用户watcher还是内部watcher
5个函数:
queueWatcher
runSchedulerQueue
queueSorter
flushSchedulerQueue
resetSchedulerState
流程:
queueWacther = >
nextTick(flushScheduler) =>
runScheduler=>
queue.forEach(watcher => watcher.run());
>queueWatcher(watcher) :
1、通过watcher.id避免重复添加;
2、通过watcher.user来获取队列;
let queue = watcher.user ? queue : userQueue
3、添加watcher到queue数组上
queue.push(watcher)
flushing && queue.splice(index,0,watcher);
4、执行nextTick(flushSchedulerQueue)
>flushScheduler() : 无参数
1.执行runSchedulerQueue(userQueue),runSchedulerQueue(queue):
2、检测Vue.devtools工具是否安装,devtools.emit('flush')事件;
3、执行retSchedulerState() 重置queue和userQueue队列状态
>runSchedulerQueue(queue):
queue.forEach(watcher => watcher.run);
queue.length = 0;