setState是同步仍是異步?

問題:

背景

當getUserIng === true時,頁面渲染;vue

預期結果:window.test('id', 'res.user') => setStatereact

結果:setState => window.test('id', 'res.user')promise

即:某組件中調用test.id時,test.id爲空,若setState是異步的,不該該出現此狀態~異步

推斷1

  1. setState多是極快的異步,
    結果:
    貌似是應驗了~~
  2. 驗證:若是setState time 是同步的,那麼

應該是:state => outside,結果:

由此但是上述推斷是錯誤的,應該是promise的問題;ide

推斷2

  1. promise的問題 下面再來一題:猜測結果

結果:

2. setTimeout中: count默認爲0

結果:count 爲5

那麼,setState是同步的嗎?是批量render的嗎?確切是爲何呢?post

緣由

推薦一篇文章, Batch Updatethis

react 中實現batch update

react中對於非自身事件(microTask、macroTask), batch update將沒法生效,故setTimeOut中,setState N次;react 經過Transaction實現batchUpdate,不依賴語言特性的通用模式

vue 中

推薦文章:Vue異步更新隊列原理從入門到放棄3d

放一張我的理解圖,若是錯誤,望指出 cdn

拓展:blog

問題1:(tick表明微任務)

  1. this.a = 1;
  2. tick(this.b = 2)
  3. tick(this.c = 3) 問:render幾回?

問題2:

  1. tick(this.aa = 1)
  2. tick(this.bb = 2) 問: render幾回?

答案分別是:2, 1

相關文章
相關標籤/搜索