MCPcopy Create free account
hub / github.com/BetaSu/big-react / processUpdateQueue

Function processUpdateQueue

packages/react-reconciler/src/updateQueue.ts:83–158  ·  view source on GitHub ↗
(
	baseState: State,
	pendingUpdate: Update<State> | null,
	renderLane: Lane,
	onSkipUpdate?: <State>(update: Update<State>) => void
)

Source from the content-addressed store, hash-verified

81}
82
83export const processUpdateQueue = <State>(
84 baseState: State,
85 pendingUpdate: Update<State> | null,
86 renderLane: Lane,
87 onSkipUpdate?: <State>(update: Update<State>) => void
88): {
89 memoizedState: State;
90 baseState: State;
91 baseQueue: Update<State> | null;
92} => {
93 const result: ReturnType<typeof processUpdateQueue<State>> = {
94 memoizedState: baseState,
95 baseState,
96 baseQueue: null
97 };
98
99 if (pendingUpdate !== null) {
100 // 第一个update
101 const first = pendingUpdate.next;
102 let pending = pendingUpdate.next as Update<any>;
103
104 let newBaseState = baseState;
105 let newBaseQueueFirst: Update<State> | null = null;
106 let newBaseQueueLast: Update<State> | null = null;
107 let newState = baseState;
108
109 do {
110 const updateLane = pending.lane;
111 if (!isSubsetOfLanes(renderLane, updateLane)) {
112 // 优先级不够 被跳过
113 const clone = createUpdate(pending.action, pending.lane);
114
115 onSkipUpdate?.(clone);
116
117 // 是不是第一个被跳过的
118 if (newBaseQueueFirst === null) {
119 // first u0 last = u0
120 newBaseQueueFirst = clone;
121 newBaseQueueLast = clone;
122 newBaseState = newState;
123 } else {
124 // first u0 -> u1 -> u2
125 // last u2
126 (newBaseQueueLast as Update<State>).next = clone;
127 newBaseQueueLast = clone;
128 }
129 } else {
130 // 优先级足够
131 if (newBaseQueueLast !== null) {
132 const clone = createUpdate(pending.action, NoLane);
133 newBaseQueueLast.next = clone;
134 newBaseQueueLast = clone;
135 }
136
137 const action = pending.action;
138 if (pending.hasEagerState) {
139 newState = pending.eagerState;
140 } else {

Callers 2

updateStateFunction · 0.90
updateHostRootFunction · 0.90

Calls 3

isSubsetOfLanesFunction · 0.90
createUpdateFunction · 0.85
basicStateReducerFunction · 0.85

Tested by

no test coverage detected