老师我遇到了一个很迷惑的问题。
不知道您有没有关注react最新的源码,react最新的源码里关于expirationTime的计算方式改变了。最新的expirationTime是越大,优先级就越高。
const MAX_SIGNED_31_BIT_INT = 1073741823;
export const Sync = MAX_SIGNED_31_BIT_INT;
从它定义Sync的值就可以看出,同步任务的expirationTime是最大的,优先级就是最高的。
时间越早,expirationTime就越大,优先级就越高。
但是在调度的时候有个task的概念。
function unstable_scheduleCallback(priorityLevel, callback, options) {
// 删了无关部分
var currentTime = getCurrentTime();
var startTime;
var timeout;
if (typeof options === 'object' && options !== null) {
timeout =
typeof options.timeout === 'number'
? options.timeout
: timeoutForPriorityLevel(priorityLevel);
} else {
timeout = timeoutForPriorityLevel(priorityLevel);
startTime = currentTime;
}
var expirationTime = startTime + timeout;
var newTask = {
id: taskIdCounter++,
callback,
priorityLevel,
startTime,
expirationTime,
sortIndex: -1,
};
//xxx
}
从这里可以看出task的expirationTime是startTime+timeout。那就是当前时间加上timeout,所以task.expirationTime是时间越早,task.expirationTime越小。
您讲课那版本的话,他们是一样的。
但是由于新版本expirationTime是越大,优先级越高,所以fiber和task的expirationTime的优先级的逻辑是反着来的。。。