問題:
背景:
當getUserIng === true時,頁面渲染;vue
預期結果:window.test('id', 'res.user') => setStatereact
結果:setState => window.test('id', 'res.user')promise
即:某組件中調用test.id時,test.id爲空,若setState是異步的,不該該出現此狀態~異步
推斷1:
- setState多是極快的異步,
結果:
貌似是應驗了~~
- 驗證:若是setState time 是同步的,那麼
應該是:state => outside,結果:
由此但是上述推斷是錯誤的,應該是promise的問題;ide
推斷2
- 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表明微任務)
- this.a = 1;
- tick(this.b = 2)
- tick(this.c = 3) 問:render幾回?
問題2:
- tick(this.aa = 1)
- tick(this.bb = 2) 問: render幾回?
答案分別是:2, 1