二 React中的更新

2022-03-08 14:02:41 字數 880 閱讀 2027

建立更新的方式:reactdom.render||hydrate 初次渲染,然後是setstate、forceupdate

步驟:建立reactroot、建立fiberroot和rootfiber、建立更新,這樣我們的應用就到了更新排程。

什麼是fiberroot : 整個應用的起點,包含應用掛載的目標節點,記錄整個應用更新過程的各種資訊

什麼是fiber:

每乙個reactelement對應乙個fiber物件

記錄節點的各種狀態。就是說state和props其實不是記錄在class component裡面的,而是記錄在fiber中,只有等fiber更新之後,classcomponent才會更新。

串聯整個應用形成樹形結構。串聯成fiber樹,主要是通過child,return, sibling這三個樹形進行串聯在一起

更新,setstate,forceupdate 只是在原始碼中的型別,tag不同。

setstate 是同步的還是非同步的?

setstate本身的方法呼叫是同步的。但是呼叫setstate並不意味著state立馬就更新了,這個更新得根據當前執行的上下文環境來判斷的。如果是處於批量更新的上下文,則state就不是立馬更新的。如果不處於批量更新的情況下,是立馬更新的。如果非同步更新,需要進入非同步排程的過程,就不是立馬更新的。

非同步排程reactscheduler:維護時間片,模擬requestidlecallback,排程列表和超時判斷。

維護時間片:瀏覽器每33ms渲染一遍

React元件更新混亂

原因 元件key值的設定不規範導致。解決辦法 給資料項設定唯一的id。使用id給元件設定key值,而不要使用,隨機的,或者按順序設定key值。問題情況 渲染元件 data 當期資料 i 當期下標 delete 刪除選框開啟 setdelete 設定刪除函式 that.state.data.map f...

React 元件更新優化

3.react.memo 4.usememo shouldcomponentupdate和react.purecomponent是類元件中的優化方式,而react.memo是函式元件中的優化方式。class componentdiffpure extends purecomponent change...

react render沒更新 React生命週期

react生命週期分為15和16兩個不同的版本 react15有四個不同的階段 在元件掛載到dom前呼叫,且只會被呼叫一次,在這邊呼叫this.setstate不會引起元件重新渲染,也可以把寫在這邊的內容提前到constructor 中,所以專案中很少用,它代表的過程是元件已經經歷了construc...