鍍金池/ 問答/HTML/ setState真的是異步執(zhí)行的么?

setState真的是異步執(zhí)行的么?

我在setState之前和之后用console.time 和console.timeEnd 測(cè)試經(jīng)過的時(shí)間

console.time('aaa')
this.setState({
    samePageCharts: samePageCharts,
    contentData: contentData,
    activeIndex: activeIndex,
    entityName: data.data.entityName,
    haveNextPage: !data.data.samePageCharts.lastPage
})
console.timeEnd('aaa') //aaa: 870.766845703125ms

控制臺(tái)打印了800+ms,這是為什么?如果是異步的話不是應(yīng)該時(shí)間很短么?

擦了下知乎,發(fā)現(xiàn)setState存在同步更新,也存在異步更新,
由 React 控制的事件處理過程 setState 不會(huì)同步更新 this.state!
在 React 控制之外的情況, setState 會(huì)同步更新 this.state!
具體鏈接在此

回答
編輯回答
絯孑氣

一定是異步的。
想要同步執(zhí)行:

setState({/*..*/}, () => {/* then do something */})
2017年6月5日 15:53
編輯回答
拽很帥

我的理解是setState是“不保證同步”,也就是說,有時(shí)是異步,有時(shí)是同步。似乎在用戶操作觸發(fā)的代碼里,大多是同步。

2017年9月29日 13:24