在聊react v16.3版本的生命週期更新之前,讓我們先來回顧一下老的生命週期,如下是react 生命週期一覽圖:
需要注意的幾點:
react v16.3生命週期:
react v16.3 不是react的大版本更新,卻有了生命週期的大改動,即新增了兩個生命週期:
deprecate了三個生命週期(三個帶will的):
變更緣由
原來(react v16.0前)的生命週期在react v16推出fiber之後就不合適了,因為如果要開啟async rendering,在render函式之前的所有函式,都有可能被執行多次。
禁止不能用比勸導開發者不要這樣用的效果更好,所以除了shouldcomponentupdate,其他在render函式之前的所有函式(componentwillmount,componentwillreceiveprops,componentwillupdate)都被getderivedstatefromprops替代。
如果在v16.3後的版本使用三個被禁用的生命週期,在其前面需要加上unsafe__,而在v17版本有可能直接被乾掉無法使用。
react v16.4生命週期:
相比之前的版本,修改了getderivedstatefromprops,使其在props,state變化和forceupdate時都更新,這樣這個生命週期理解起來更容易一些。
getderivedstatefrompropsstatic getderivedstatefromprops(props, state)
getderivedstatefromprops 會在呼叫 render 方法之前呼叫,並且在初始掛載及後續更新時都會被呼叫。它應返回乙個物件來更新 state,如果返回 null 則不更新任何內容。
我們知道getderivedstatefromprops是乙個靜態函式,在其中是無法訪問到元件例項的,也就是強制開發者在render之前只做無***的操作,而是根據props和state決定新的state,僅此而已。
getsnapshotbeforeupdategetsnapshotbeforeupdate(prevprops, prevstate)
getsnapshotbeforeupdate() 在最近一次渲染輸出(提交到 dom 節點)之前呼叫。它使得元件能在發生更改之前從 dom 中捕獲一些資訊(例如,滾動位置)。此生命週期的任何返回值將作為引數傳遞給 componentdidupdate(prevprops, prevstate, snapshot)。
軟體生命週期的主要階段
軟體生命週期 sdlc 的六個階段 1 問題的定義及規劃 此階段是軟體開發方與需求方共同討論,主要確定軟體的開發目標及其可行性。2 需求分析 在確定軟體開發可行的情況下,對軟體需要實現的各個功能進行詳細分析。需求分析階段是乙個很重要的階段,這一階段做得好,將為整個軟體開發專案的成功打下良好的基礎。唯...
React階段 生命週期函式
生命週期函式的存在,就是為了能夠將頁面載入的過程分割開來 便於開發和後期維護,提高效率 掛載階段 unsafe componentwillmount render componentdidmount 資料更新階段 修改資料前只會觸發render 方法 修改資料後全部觸發 父元件更新導致子元件更新時,...
更新階段的生命週期
react在每個元件生命週期更新的時候都會呼叫乙個shouldcomponentupdate nextprops,nextstate 函式。它的職責就是返回true或false,true表示需要更新,false表示不需要,預設返回為true,即便你沒有顯示地定義 shouldcomponentupd...