老生常談之setState 是同步的還是異步的?
設想setState是同步的,那也就是每次調用setState都要進行新舊虛擬DOM的對比,然后將差異化的dom更新到頁面上,性能損耗很大
所以react把setState設置為了異步,當狀態更新時不能立即拿到更新后的狀態,而是批量進行更新
調用setState之后React都做了什么
首先上圖
上圖就是setState執行后的react所做的事情
1、enqueueSetState
?方法將傳入的狀態放到組件的狀態隊列里面
2、enqueueUpdate
?來處理將要更新的實例對象
3、enqueueUpdate在處理組件實例時,會先判讀啊
batchingStrategy對象中isBatchingUpdates是true還是false
4、如果是true,說明組件正在批量更新,任何需要更新的組件需要進入dirtyComponents隊列進行等待
5、如果是false,就正常進行批量更新