终于晓得了,没想到这么简略。以前的纳闷就是,里面疯狂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完了之后他就会立即调用更新操作。
切实没想到会这么简略,亏我想破了脑袋