1. const classComponentUpdater = {
    2. // isMounted
    3. enqueueSetState(inst, payload, callback) {
    4. const fiber = ReactInstanceMap.get(inst)
    5. const currentTime = requestCurrentTime()
    6. const expirationTime = computeExpirationForFiber(currentTime, fiber)
    7. const update = createUpdate(expirationTime)
    8. update.payload = payload
    9. if (callback !== undefined && callback !== null) {
    10. update.callback = callback
    11. }
    12. enqueueUpdate(fiber, update)
    13. scheduleWork(fiber, expirationTime)
    14. },
    15. // replaceState
    16. enqueueForceUpdate(inst, callback) {
    17. const fiber = ReactInstanceMap.get(inst)
    18. const currentTime = requestCurrentTime()
    19. const expirationTime = computeExpirationForFiber(currentTime, fiber)
    20. const update = createUpdate(expirationTime)
    21. update.tag = ForceUpdate
    22. if (callback !== undefined && callback !== null) {
    23. update.callback = callback
    24. }
    25. enqueueUpdate(fiber, update)
    26. scheduleWork(fiber, expirationTime)
    27. },
    28. }

    setState调用updater.enqueueSetState,我们先不管这个对象什么时候设置进来的,先来看一下代码
    setStateforceUpdate的代码我们可以看到,几乎是一模一样的。唯一的区别是Update.tag
    关于UpdateUpdateQueue的数据结构可以看
    语雀内容
    在当前节点对应的Fiber对象上创建了Update之后,进就如scheduleWork调度阶段。