React生命周期

掛在?

constructor()

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 方法之間重用代碼。

render()

componentDidMount()

更新

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()

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ì)損害性能窘奏。

render()

getSnapshotBeforeUpdate()

getSnapshotBeforeUpdate()?在最近一次渲染輸出(提交到 DOM 節(jié)點(diǎn))之前調(diào)用嘹锁。它使得組件能在發(fā)生更改之前從 DOM 中捕獲一些信息(例如,滾動(dòng)位置)着裹。此生命周期的任何返回值將作為參數(shù)傳遞給?componentDidUpdate()领猾。

此用法并不常見,但它可能出現(xiàn)在 UI 處理中骇扇,如需要以特殊方式處理滾動(dòng)位置的聊天線程等摔竿。

應(yīng)返回 snapshot 的值(或?null)。

componentDidUpdate()

componentDidUpdate(prevProps,prevState,snapshot)

componentDidUpdate()?會(huì)在更新后會(huì)被立即調(diào)用少孝。首次渲染不會(huì)執(zhí)行此方法继低。


卸載

componentWillUnmount()


錯(cuò)誤處理

static getDerivedStateFromError()

此生命周期會(huì)在后代組件拋出錯(cuò)誤后被調(diào)用。 它將拋出的錯(cuò)誤作為參數(shù)稍走,并返回一個(gè)值以更新 stat

componentDidCatch()

此生命周期在后代組件拋出錯(cuò)誤后被調(diào)用袁翁。 它接收兩個(gè)參數(shù):

error?—— 拋出的錯(cuò)誤。

info?—— 帶有?componentStack?key 的對(duì)象婿脸,其中包含有關(guān)組件引發(fā)錯(cuò)誤的棧信息粱胜。

componentDidCatch()?會(huì)在“提交”階段被調(diào)用,因此允許執(zhí)行副作用狐树。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末焙压,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冗恨,老刑警劉巖答憔,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異掀抹,居然都是意外死亡虐拓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門傲武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓉驹,“玉大人,你說我怎么就攤上這事揪利√耍” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵疟位,是天一觀的道長(zhǎng)瞻润。 經(jīng)常有香客問我,道長(zhǎng)甜刻,這世上最難降的妖魔是什么绍撞? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮得院,結(jié)果婚禮上傻铣,老公的妹妹穿的比我還像新娘。我一直安慰自己祥绞,他們只是感情好非洲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜕径,像睡著了一般两踏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兜喻,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天梦染,我揣著相機(jī)與錄音,去河邊找鬼虹统。 笑死弓坞,一個(gè)胖子當(dāng)著我的面吹牛隧甚,可吹牛的內(nèi)容都是我干的车荔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼戚扳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼忧便!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤珠增,失蹤者是張志新(化名)和其女友劉穎超歌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒂教,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巍举,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凝垛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懊悯。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梦皮,靈堂內(nèi)的尸體忽然破棺而出炭分,到底是詐尸還是另有隱情,我是刑警寧澤剑肯,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布捧毛,位于F島的核電站,受9級(jí)特大地震影響让网,放射性物質(zhì)發(fā)生泄漏呀忧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一寂祥、第九天 我趴在偏房一處隱蔽的房頂上張望荐虐。 院中可真熱鬧,春花似錦丸凭、人聲如沸福扬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铛碑。三九已至,卻和暖如春虽界,著一層夾襖步出監(jiān)牢的瞬間汽烦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工莉御, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撇吞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓礁叔,卻偏偏與公主長(zhǎng)得像牍颈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子琅关,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn)好像有些沒有過的生命周期函數(shù),還沒完全弄清楚... 一画机、組件的生命周期 組件的生命周期冶伞,主要分為 Mounti...
    越前君閱讀 1,989評(píng)論 0 4
  • React 生命周期可以分為三部分 一、掛載時(shí) 當(dāng)組件實(shí)例被創(chuàng)建并插入 DOM 中時(shí)步氏,其生命周期調(diào)用順序如下: c...
    ByePast閱讀 1,120評(píng)論 0 0
  • react 生命周期函數(shù) React 生命周期分為三種狀態(tài) 1. 初始化 2.更新 3.銷毀初始化 初始化 get...
    騎著蝸牛逛妓院閱讀 314評(píng)論 0 1
  • 對(duì)于react生命周期的理解响禽,反反復(fù)復(fù)有很多次不同的理解,我就做個(gè)整理荚醒,以免每次都進(jìn)行重新推翻按照官網(wǎng)的解釋組件的...
    sherry_碎片閱讀 506評(píng)論 0 0
  • 某一時(shí)刻可以被組件自動(dòng)調(diào)用的函數(shù) 掛載 當(dāng)組件實(shí)例被創(chuàng)建并插入 DOM 中時(shí)金抡,其生命周期調(diào)用順序如下: const...
    RQrry閱讀 92評(píng)論 0 0