跳到主要内容

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; // 空闲优先级
}