const classComponentUpdater = {// isMountedenqueueSetState(inst, payload, callback) {const fiber = ReactInstanceMap.get(inst)const currentTime = requestCurrentTime()const expirationTime = computeExpirationForFiber(currentTime, fiber)const update = createUpdate(expirationTime)update.payload = payloadif (callback !== undefined && callback !== null) {update.callback = callback}enqueueUpdate(fiber, update)scheduleWork(fiber, expirationTime)},// replaceStateenqueueForceUpdate(inst, callback) {const fiber = ReactInstanceMap.get(inst)const currentTime = requestCurrentTime()const expirationTime = computeExpirationForFiber(currentTime, fiber)const update = createUpdate(expirationTime)update.tag = ForceUpdateif (callback !== undefined && callback !== null) {update.callback = callback}enqueueUpdate(fiber, update)scheduleWork(fiber, expirationTime)},}
setState调用updater.enqueueSetState,我们先不管这个对象什么时候设置进来的,先来看一下代码setState和forceUpdate的代码我们可以看到,几乎是一模一样的。唯一的区别是Update.tag
关于Update和UpdateQueue的数据结构可以看
语雀内容
在当前节点对应的Fiber对象上创建了Update之后,进就如scheduleWork调度阶段。
