react源码
思维导图
关键问题:
高优先级任务插入后的操作
假设高优任务taskH,正在执行的低优任务taskL
1) 在ensureRootIsScheduled中创建taskH,并插入taskqueue,由于taskqueue自动排序,taskH 在它的过期时间比所有现有任务都早时会在队首。然后将root.callbackNode指向taskH
2)在performConcurrentWorkOnRoot中根据root.callbackNode和当前任务是否一致判断是否有高优任务进入:如果有就取消当前任务并设置taskL.callback=null,回退到workLoop中,由于callback=null,所以取消taskL并重新获取taskqueue队首任务,也就是taskH,从而执行taskH的callback
scheduler+render关键代码流程图备份(自用)
ensureRootIsScheduled
从ensureRootIsScheduled到task.callback执行