掛在?
static getDerivedStateFromProps()
static getDerivedStateFromProps(props,state)
getDerivedStateFromProps?會(huì)在調(diào)用 render 方法之前調(diào)用袒餐,并且在初始掛載及后續(xù)更新時(shí)都會(huì)被調(diào)用啊研。它應(yīng)返回一個(gè)對(duì)象來更新 state臼节,如果返回 null 則不更新任何內(nèi)容敦锌。
此方法適用于罕見的用例勾怒,即 state 的值在任何時(shí)候都取決于 props。例如吩屹,實(shí)現(xiàn)?<Transition>?組件可能很方便钻蔑,該組件會(huì)比較當(dāng)前組件與下一組件,以決定針對(duì)哪些組件進(jìn)行轉(zhuǎn)場(chǎng)動(dòng)畫秃殉。
此方法無權(quán)訪問組件實(shí)例坝初。如果你需要,可以通過提取組件 props 的純函數(shù)及 class 之外的狀態(tài)复濒,在getDerivedStateFromProps()和其他 class 方法之間重用代碼。
更新
static getDerivedStateFromProps()
getSnapshotBeforeUpdate(prevProps,prevState)
getSnapshotBeforeUpdate()?在最近一次渲染輸出(提交到 DOM 節(jié)點(diǎn))之前調(diào)用乒省。它使得組件能在發(fā)生更改之前從 DOM 中捕獲一些信息(例如巧颈,滾動(dòng)位置)。此生命周期的任何返回值將作為參數(shù)傳遞給?componentDidUpdate()袖扛。
此用法并不常見砸泛,但它可能出現(xiàn)在 UI 處理中,如需要以特殊方式處理滾動(dòng)位置的聊天線程等蛆封。
應(yīng)返回 snapshot 的值(或?null)唇礁。
shouldComponentUpdate(nextProps,nextState)
根據(jù)?shouldComponentUpdate()?的返回值,判斷 React 組件的輸出是否受當(dāng)前 state 或 props 更改的影響惨篱。默認(rèn)行為是 state 每次發(fā)生變化組件都會(huì)重新渲染盏筐。大部分情況下,你應(yīng)該遵循默認(rèn)行為砸讳。
當(dāng) props 或 state 發(fā)生變化時(shí)琢融,shouldComponentUpdate()?會(huì)在渲染執(zhí)行之前被調(diào)用界牡。返回值默認(rèn)為 true。首次渲染或使用?forceUpdate()?時(shí)不會(huì)調(diào)用該方法漾抬。
此方法僅作為性能優(yōu)化的方式而存在宿亡。不要企圖依靠此方法來“阻止”渲染,因?yàn)檫@可能會(huì)產(chǎn)生 bug纳令。你應(yīng)該考慮使用內(nèi)置的?PureComponent?組件挽荠,而不是手動(dòng)編寫?shouldComponentUpdate()。PureComponent?會(huì)對(duì) props 和 state 進(jìn)行淺層比較平绩,并減少了跳過必要更新的可能性圈匆。
如果你一定要手動(dòng)編寫此函數(shù),可以將?this.props?與?nextProps?以及?this.state?與nextState?進(jìn)行比較馒过,并返回?false?以告知 React 可以跳過更新臭脓。請(qǐng)注意,返回?false?并不會(huì)阻止子組件在 state 更改時(shí)重新渲染腹忽。
我們不建議在?shouldComponentUpdate()?中進(jìn)行深層比較或使用?JSON.stringify()来累。這樣非常影響效率,且會(huì)損害性能窘奏。
getSnapshotBeforeUpdate()?在最近一次渲染輸出(提交到 DOM 節(jié)點(diǎn))之前調(diào)用嘹锁。它使得組件能在發(fā)生更改之前從 DOM 中捕獲一些信息(例如,滾動(dòng)位置)着裹。此生命周期的任何返回值將作為參數(shù)傳遞給?componentDidUpdate()领猾。
此用法并不常見,但它可能出現(xiàn)在 UI 處理中骇扇,如需要以特殊方式處理滾動(dòng)位置的聊天線程等摔竿。
應(yīng)返回 snapshot 的值(或?null)。
componentDidUpdate(prevProps,prevState,snapshot)
componentDidUpdate()?會(huì)在更新后會(huì)被立即調(diào)用少孝。首次渲染不會(huì)執(zhí)行此方法继低。
卸載
錯(cuò)誤處理
static getDerivedStateFromError()
此生命周期會(huì)在后代組件拋出錯(cuò)誤后被調(diào)用。 它將拋出的錯(cuò)誤作為參數(shù)稍走,并返回一個(gè)值以更新 stat
此生命周期在后代組件拋出錯(cuò)誤后被調(diào)用袁翁。 它接收兩個(gè)參數(shù):
error?—— 拋出的錯(cuò)誤。
info?—— 帶有?componentStack?key 的對(duì)象婿脸,其中包含有關(guān)組件引發(fā)錯(cuò)誤的棧信息粱胜。
componentDidCatch()?會(huì)在“提交”階段被調(diào)用,因此允許執(zhí)行副作用狐树。