未來版本react 17新增的生命週期

2021-10-01 23:33:23 字數 2291 閱讀 4000

一、廢除的生命週期

官網文件指出使用這些生命週期的**會在未來版本的react中更容易產生bug,尤其是對於非同步渲染的版本

由於未來採用非同步渲染機制,所以即將在17版本中去掉的生命週期鉤子函式

componentwillmount

componentwillrecieveprops

componentwillupdate

二、新增的生命週期

static getderivedstatefromprops(nextprops, prevstate) {}
用於替換componentwillreceiveprops,可以用來控制 props 更新 state 的過程;它返回乙個物件表示新的 state;如果不需要更新,返回 null 即可

在每次渲染之前都會呼叫,不管初始掛載還是後面的更新都會呼叫,這一點和componentwillreceiveprops不同(只有當父元件造成重新渲染時才呼叫

簡單的理解就說從props中獲取state,這個生命週期的功能實際上就是將傳入的props對映到state上面

getderivedstatefromprops是乙個靜態函式,也就是這個函式不能通過this訪問到class的屬性,也並不推薦直接訪問屬性。而是應該通過引數提供的nextprops以及prevstate來進行判斷,根據新傳入的props來對映到state

如果props傳入的內容不需要影響到你的state,那麼就需要返回乙個null,這個返回值是必須的,所以盡量將其寫到函式的末尾

static getderivedstatefromprops(nextprops, prevstate)  = nextprops;

// 當傳入的type發生變化的時候,更新state

if (type !== prevstate.type) ;

}// 否則,對於state不進行任何操作

return null;

}

getsnapshotbeforeupdate() {}

在最近的更改被提交到dom元素前,使得元件可以在更改之前獲得當前值,此生命週期返回的任意值都會傳給componentdidupdate()。
用於替換 componentwillupdate,該函式會在update後 dom 更新前被呼叫,用於讀取最新的 dom 資料,返回值將作為 componentdidupdate 的第三個引數

在最新的渲染資料提交給dom前會立即呼叫,它讓你在元件的資料可能要改變之前獲取他們

componenddidcatch(error, info)

如果乙個元件定義了componentdidcatch生命週期,則他將成為乙個錯誤邊界(錯誤邊界會捕捉渲染期間、在生命週期方法中和在它們之下整棵樹的建構函式中的錯誤,

就像使用了try catch,不會將錯誤直接丟擲了,保證應用的可用性)

三、基本使用

class a extends react.component 

// 用於替換 `componentwillreceiveprops` ,該函式會在初始化和 `update` 時被呼叫

// 因為該函式是靜態函式,所以取不到 `this`

// 如果需要對比 `prevprops` 需要單獨在 `state` 中維護

static getderivedstatefromprops(nextprops, prevstate) {}

// 判斷是否需要更新元件,多用於元件效能優化

shouldcomponentupdate(nextprops, nextstate) {}

// 元件掛載後呼叫

// 可以在該函式中進行請求或者訂閱

componentdidmount() {}

// 用於獲得最新的 dom 資料

getsnapshotbeforeupdate() {}

// 元件即將銷毀

// 可以在此處移除訂閱,定時器等等

componentwillunmount() {}

// 元件銷毀後呼叫

componentdidunmount() {}

// 元件更新後呼叫

componentdidupdate() {}

// 渲染元件函式

render() {}

}

react 17新增的生命週期

一 廢除的生命週期 官網文件指出使用這些生命週期的 會在未來版本的react中更容易產生bug,尤其是對於非同步渲染的版本 由於未來採用非同步渲染機制,所以即將在17版本中去掉的生命週期鉤子函式 componentwillmount componentwillrecieveprops compone...

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

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

React16 新增的生命週期

圖源出處 新增的生命週期getderivedstatefromprops getsnapshotbeforeupdate componentdidcatch getderivedstatefromerror 廢棄的生命週期 react17去除,react16不允許和新的生命週期同時使用 compon...