终于知道了,没想到这么简单。以前的疑惑就是,外面疯狂setState,setState自身怎么知道当前调用是最后一次调用了,这之后我就应该执行真正的赋值操作。 其实根本就不需要知道,而是这样的,参考:https://zhuanlan.zhihu.com/p/...
function enqueueSetState( stateChange, component ) {
// 如果queue的长度是0,也就是在上次flush执行之后第一次往队列里添加
if ( queue.length === 0 ) {
defer( flush );
}
queue.push( {
stateChange,
component
} );
if ( !renderQueue.some( item => item === component ) ) {
renderQueue.push( component );
}
}
这第一次调用的时候,就声明了,我需要异步的执行真正的更新操作。这样,所有的同步的调用push完了之后他就会立刻调用更新操作。
实在没想到会这么简单,亏我想破了脑袋
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。