天天看點

001.React 中 setState 什麼時候是同步的,什麼時候是異步的?

  在React中,

  1、如果是由React引發的事件處理(比如通過onClick引發的事件處理),調用setState不會同步更新this.state,

  2、除此之外的setState調用會同步執行this.state。

    所謂“除此之外”,指的是繞過React通過addEventListener直接添加的事件處理函數,還有通過setTimeout/setInterval産生的異步調用。

  原因: 在React的setState函數實作中,會根據一個變量isBatchingUpdates判斷是直接更新this.state還是放到隊列中回頭再說,而isBatchingUpdates預設是false,也就表示setState會同步更新this.state,但是,有一個函數batchedUpdates,這個函數會把isBatchingUpdates修改為true,而當React在調用事件處理函數之前就會調用這個batchedUpdates,造成的後果,就是由React控制的事件處理過程setState不會同步更新this.state。

上一篇: 背景模組化