React Event Priorities (事件优先级)
React 的事件的优先级。
一、作用
二、常量值
信息
我就想着 Lane 已经那么多了,咋还不包括事件优先级,原来。。。就是 Lane 的值。
以下 Lane 出自于文件 ReactFiberLane
// 无事件优先级
export const NoEventPriority: EventPriority = NoLane;
// 离散事件优先级
export const DiscreteEventPriority: EventPriority = SyncLane;
// 连续事件优先级
export const ContinuousEventPriority: EventPriority = InputContinuousLane;
// 默认事件优先级
export const DefaultEventPriority: EventPriority = DefaultLane;
// 空闲事件优先级
export const IdleEventPriority: EventPriority = IdleLane;
三、 更高事件优先级
返回的是更高优先级的值。
export function higherEventPriority(
a: EventPriority,
b: EventPriority,
): EventPriority {
return a !== 0 && a < b ? a : b;
}
四、更低事件优先级
export function lowerEventPriority(
a: EventPriority,
b: EventPriority,
): EventPriority {
return a === 0 || a > b ? a : b;
}
五、是否更高事件优先级
返回的是布尔值
export function isHigherEventPriority(
a: EventPriority,
b: EventPriority,
): boolean {
return a !== 0 && a < b;
}
六、事件优先级与 Lane 转换
1. 事件优先级到 Lane
export function eventPriorityToLane(updatePriority: EventPriority): Lane {
return updatePriority;
}
2. Lane 到事件优先级
信息
getHighestPriorityLane方法由 [ReactFiberLane#获取最高优先级车道] 提供
export function lanesToEventPriority(lanes: Lanes): EventPriority {
// 获取最高优先级
const lane = getHighestPriorityLane(lanes);
if (!isHigherEventPriority(DiscreteEventPriority, lane)) {
return DiscreteEventPriority; // 离散型随机变量
}
if (!isHigherEventPriority(ContinuousEventPriority, lane)) {
return ContinuousEventPriority; // 连续事件优先级
}
if (includesNonIdleWork(lane)) {
return DefaultEventPriority; // 默认事件优先级
}
return IdleEventPriority; // 空闲优先级
}