- 名为queue的变量并不是一整个队列,而是围绕队列概念的对象;
- 队列本体是由内存中数个链表节点构成的,queue对象身上的属性只会存储链表的首末指针;
- 如果队列本体是个循环链表,queue对象身上的属性存的是循环链表的末尾指针;因为拿到末尾指针,即可以进行队尾插入,又可以通过.next找到头节点进行出队;
所以React更新队列的数据结构其实长这样:
const queue: UpdateQueue<State> = {
baseState: fiber.memoizedState,
firstBaseUpdate: null, // 链表头指针
lastBaseUpdate: null, // 链表尾指针
shared: {
pending: null, // 循环链表尾指针
},
// ...
};
起名为queue的变量并不是队列本体,甚至这个对象身上有两个形态的队列……