1.在回答這個問題之前,我們先來做一個假設;
如果setState是同步的,意味着每執行一次setState就會進行vnode diff+dom修改,
如果是異步,就可以把一個同步代碼中的多個setState合並成一次組件更新;
2.setState什么時候是同步?
在setTimeOut或者原生事件中,setState是同步的
3.setState什么時候是異步?
在React自定義事件中是異步
4.setState之后發生了什么?
在代碼中setState之后,React會將傳入的參數對象與組件當前狀態合並,觸發所謂的調和過程(Reconciliation);
經過調和過程,React會以相對高效的方式根據新的狀態構建React元素樹並着手渲染ui界面;
在React得到新的元素樹之后,會自動計算出新老樹之間的結構差異,然后根據差異對界面進行最小化重渲染;
在差異算法中,React能夠相對精確的計算出哪些位置發生了改變,做到按需加載而不用重新渲染整個界面