react新舊版本生命週期函式講解

2021-10-03 08:40:11 字數 1920 閱讀 3150

react在引入 fiber 之後,其生命週期也有所變化,新增了一些生命週期函式,同時也建議使用者廢棄一些生命週期函式,下面博主對比一下react v16.3之前的生命週期與react v16.4及之後的生命週期函式。

當元件的 props 或 state 發生變化時會觸發更新。元件更新的生命週期呼叫順序如下: 解除安裝

當元件從 dom 中移除時會呼叫如下方法:

當元件的 props 或 state 發生變化時會觸發更新。元件更新的生命週期呼叫順序如下: 解除安裝

當元件從 dom 中移除時會呼叫如下方法:

錯誤處理

當渲染過程,生命週期,或子元件的建構函式中丟擲錯誤時,會呼叫如下方法:

新增其他 apis

通過上面的對比,我們可以知道,老闆生命週期中有三個生命週期函式將會被廢棄,分別是:

這三個生命週期函式都是在render之前呼叫的,官方也指出,這三個生命週期方法經常被誤解和濫用,而且因為 fiber 的出現,它們潛在的誤用問題可能更大。

新增的為:

對於廢棄的生命週期函式,官方會採用逐步遷移的方式來實現版本的遷移:

下面將逐個對變化的生命週期函式進行解析:

componentwillreceiveprops()componentwillupdate()render()之前執行,而且可以獲取的 當前和即將更新的 props 或 state,所以我們經常會在這兩個生命週期中針對 props 或 state 變化時做一些邏輯處理。

新的getderivedstatefromprops()生命週期方法是靜態方法,所以在使用時,需要在前面加上static關鍵字,在元件例項化之後以及重新渲染之前呼叫。它可以返回乙個物件來更新 state,或者返回 null 來表示新的 props 不需要任何 state 的更新。從方法的命名上也可以發現,該方法主要功能是實現上面的基於 props 更新 state。

getsnapshotbeforeupdate(prevprops, prevstate)生命週期方法在更新之前(如:更新 dom 之前)被呼叫。此生命週期的返回值將作為第三個引數傳遞給componentdidupdate。(通常不需要,但在重新渲染過程中手動保留滾動位置等情況下非常有用。)主要針對上述的更新前讀取 dom 屬性。

getderivedstatefromerror()用於錯誤邊界處理的生命週期函式,是靜態方法, 與getderivedstatefromprops()類似,使用時需要加上static關鍵字,並且返回乙個物件來更新 state,只不過更新的 state 主要用於標識後代元件**現了報錯,但它本身的錯誤無法捕獲。一般 我們用static getderivedstatefromerror()渲染備用 ui。

我們一般使用componentdidcatch(error, info)來列印和收集錯誤資訊。它接收兩個引數:

關於更多的錯誤邊界可參考官網描述:

呼叫forceupdate()將致使元件呼叫render()方法,此操作會跳過該元件的shouldcomponentupdate()。但其子元件會觸發正常的生命週期方法,包括shouldcomponentupdate()方法。官方建議應該避免使用 forceupdate(),盡量在render()中使用this.propsthis.state

reference:

1、2、

React16新增生命週期與舊版本生命週期的區別

舊版本生命週期 react16新增生命週期 總結 1.react16新的生命週期棄用了componentwillmount componentwillreceiveporps,componentwillupdate 2.新增了getderivedstatefromprops getsnapshotb...

React生命週期函式

說來慚愧,準大四計算機專業學生黨第一次寫技術部落格。以前學東西沒有記錄的習慣總是容易忘記。最近在看老師的教程學習react框架,想寫點東西記錄一下學習的過程。若寫的不好,各位大佬見諒了,歡迎指正。什麼是生命週期函式?生命週期函式就是元件某一時刻會自動執行的函式。initialzation 初始化 m...

React 生命週期函式

initialization 初始化 mounting 掛載 updation 更新 unmounting setup componentwillmount props states componentwillunmont 當這個元件即將被從頁面中移除的時候,會被執行 props render co...