可以看到,this.setState
内会调用this.updater.enqueueSetState
方法。
在enqueueSetState
方法中就是我们熟悉的从创建update
到调度update
的流程了。
这里值得注意的是对于ClassComponent
,update.payload
为this.setState
的第一个传参(即要改变的state
)。
可以看到,除了赋值以及没有payload
外,其他逻辑与this.setState
一致。
那么赋值update.tag = ForceUpdate;
有何作用呢?
在判断ClassComponent
是否需要更新时有两个条件需要满足:
所以,当某次更新含有tag
为ForceUpdate
的Update
,那么当前ClassComponent
不会受其他性能优化手段
(shouldComponentUpdate
|PureComponent
)影响,一定会更新。
至此,我们学习完了HostRoot | ClassComponent
所使用的Update
的更新流程。
在下一章我们会学习另一种数据结构的Update
—— 用于Hooks
的Update
。