建立更新的方式: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...