react setState解讀

react setState解讀

總結(jié):
看似同步,實(shí)則異步。

setState(updater, callback)這個(gè)方法是用來告訴react組件數(shù)據(jù)有更新,有可能需要重新渲染。它是異步的,react通常會集齊一批需要更新的組件,然后一次性更新來保證渲染的性能,所以這就給我們埋了一個(gè)坑:
那就是在使用setState改變狀態(tài)之后,立刻通過this.state去拿最新的狀態(tài)往往是拿不到的。callback將會在state數(shù)據(jù)更新后且組件重新渲染完后執(zhí)行。

總結(jié) :

  1. setState 只在合成事件和鉤子函數(shù)中是“異步”的,在原生事件和 setTimeout 中都是同步的。
  2. setState的“異步”并不是說內(nèi)部由異步代碼實(shí)現(xiàn),其實(shí)本身執(zhí)行的過程和代碼都是同步的,只是合成事件和鉤子函數(shù)的調(diào)用順序在更新之前,導(dǎo)致在合成事件和鉤子函數(shù)中沒法立馬拿到更新后的值,形式了所謂的“異步”,當(dāng)然可以通過第二個(gè)參數(shù) setState(partialState, callback) 中的callback拿到更新后的結(jié)果。
  3. setState 的批量更新優(yōu)化也是建立在“異步”(合成事件、鉤子函數(shù))之上的,在原生事件和setTimeout 中不會批量更新,在“異步”中如果對同一個(gè)值進(jìn)行多次 setState , setState 的批量更新策略會對其進(jìn)行覆蓋,取最后一次的執(zhí)行,如果是同時(shí) setState 多個(gè)不同的值,在更新時(shí)會對其進(jìn)行合并批量更新。

參考:https://imweb.io/topic/5b189d04d4c96b9b1b4c4ed6
看總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我的掘金https://juejin.im/user/5c6e6a11f265da2ddd4a5a56/posts...
    woow_wu7閱讀 1,334評論 0 2
  • 大概不久就是各種 hooks 漫天飛舞的世界。 本文記錄一下 React Hooks 學(xué)習(xí),算是還一下技術(shù)債。只是...
    Jeremy_young閱讀 488評論 0 0
  • 眾所周知,React 通過 this.state 來訪問 state,通過 this.setState() 來更新...
    南風(fēng)知我意ZD閱讀 502評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,896評論 28 54
  • 信任包括信任自己和信任他人 很多時(shí)候,很多事情,失敗、遺憾、錯(cuò)過,源于不自信,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,391評論 4 8

友情鏈接更多精彩內(nèi)容