【React源码学习】0 补充 initializeUpdateQueue函数的调用


该函数的在createFiberRoot内调用,调用过程如下

function createFiberRoot(containerInfo, tag, hydrate, hydrationCallbacks) {
    var root = new FiberRootNode(containerInfo, tag, hydrate);
    var uninitializedFiber = createHostRootFiber(tag);
    root.current = uninitializedFiber;

    uninitializedFiber.stateNode = root;

    initializeUpdateQueue(uninitializedFiber);
    return root;
}

该函数接受一个fiber(RootFiber),源码如下

function initializeUpdateQueue(fiber) {
    var queue = {
        baseState: fiber.memoizedState,
        firstBaseUpdate: null,
        lastBaseUpdate: null,
        shared: {
            pending: null
        },
        effects: null
    };
    fiber.updateQueue = queue;
}

updateQueue是一个与组件更新相关的数据结构,

baseState -> 该fiber本次更新前的state

firstBaseUpdate,lastBaseUpdate -> 均是指向Update链表的指针

shared -> 触发更新时,产生的Update在pending中形成单向环状链表。当由Update计算state时这个环会被剪开并连接在lastBaseUpdate后面。

(由于目前还是前端初学者,对React理解比较差,这一部分参考了React技术揭秘)


Author: Maple
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Maple !
  TOC