React 生命周期

從印度回來后學(xué)了 React 那么久竭业,居然從來沒有仔細(xì)去看過 React 的生命周期脂崔。還是今天被問到的時(shí)候,才知道了赏半。

猶記得有那么一段時(shí)間梅忌,手機(jī)的鎖屏還是


當(dāng)年的手機(jī)鎖屏.png

然而今天并沒有完整的說出這所有的過程(按照順序),分分鐘打臉了除破。

事實(shí)上,React 的生命周期主要分為三個(gè)過程:裝載過程琼腔,更新過程瑰枫,以及卸載過程。

裝載過程

把組件第一次在 DOM 樹種渲染的過程

image.png
  • getDefaultProps()
    用來設(shè)置組件屬性的默認(rèn)值丹莲,在組件被建立時(shí)就會(huì)立即調(diào)用光坝,所有實(shí)例都可以共享這些屬性。
  • getInitialState()
    用于定義初始狀態(tài)甥材。
  • componentWillMount()
    只在初始化時(shí)候被調(diào)用一次盯另,可以使用 setState 方法,會(huì)立即更新 state洲赵,然后會(huì)進(jìn)行 render鸳惯。
  • render()
    render 中使用 setState 方法會(huì)報(bào)錯(cuò)。若其中包含其他的子組件叠萍,那么子組件的生命周期才開始進(jìn)行
  • componentDidMount()
    在子組件也都加載完畢后執(zhí)行芝发,DOM 渲染完成,此時(shí)就可以操作 DOM 了苛谷。但是由于 React 中的 DOM 是虛擬 DOM辅鲸,因此不推薦操作 DOM。

更新過程

組件被重新渲染的過程

更新過程分為 props 發(fā)生改變和 state 發(fā)生改變

  1. props 發(fā)生改變
  • componentWillReceiveProps(nextProps)
  • shouldComponentUpdate(nextProps, nextState)
  • componentWillUpdate(nextProps, nextState)
  • render()
  • componentDidUpdate(prevProps, prevState)
  1. state 發(fā)生改變
  • shouldComponentUpdate(nextProps, nextState)
  • componentWillUpdate(nextProps, nextState)
  • render()
  • componentDidUpdate(prevProps, prevState)

其中腹殿,

  • shouldComponentUpdate(nextProps, nextState)
    該方法決定了一個(gè)組件什么時(shí)候不需要渲染独悴,返回一個(gè)布爾值。告訴 React 這個(gè)組件在這次更新過程中是否要繼續(xù)锣尉。
    shouldComponentUpdate(nextProps, nextState)

通常在該方法中比較當(dāng)前的 state刻炒,props 和 nextState,nextProps 來進(jìn)行比較自沧。返回 true 或 false 來渲染組件落蝙,優(yōu)化性能

  • componentWillUpdate(nextProps, nextState)
    在 state 改變或 shouldComponentUpdate 返回 true 后出發(fā)

  • componentDidUpdate(prevProps, prevState)
    會(huì)等子組件也都更新完后才觸發(fā)

卸載過程

組件從 DOM 中刪除的過程

image.png
  • componentWillUnmount()
    該方法與 componentDidMount 有關(guān)暂幼,例如:在 componentDidMount 中用非 React 的方法創(chuàng)造一些 DOM 元素筏勒,如果不管可能會(huì)造成內(nèi)存泄漏,因此需要 componentWillUnmount 中把這些創(chuàng)造的 DOM 元素清理掉旺嬉。

注意
不要在 shouldCompoentUpdate管行、componentWillUpdate、componentDidUpdate邪媳,以及 render 中使用 setState捐顷。


The End ~
21 天寫作訓(xùn)練荡陷,第 8 天 ing

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市迅涮,隨后出現(xiàn)的幾起案子废赞,更是在濱河造成了極大的恐慌,老刑警劉巖叮姑,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唉地,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡传透,警方通過查閱死者的電腦和手機(jī)耘沼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朱盐,“玉大人群嗤,你說我怎么就攤上這事”眨” “怎么了狂秘?”我有些...
    開封第一講書人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躯肌。 經(jīng)常有香客問我赃绊,道長(zhǎng),這世上最難降的妖魔是什么羡榴? 我笑而不...
    開封第一講書人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任碧查,我火速辦了婚禮,結(jié)果婚禮上校仑,老公的妹妹穿的比我還像新娘忠售。我一直安慰自己,他們只是感情好迄沫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開白布稻扬。 她就那樣靜靜地躺著,像睡著了一般羊瘩。 火紅的嫁衣襯著肌膚如雪泰佳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,879評(píng)論 1 290
  • 那天尘吗,我揣著相機(jī)與錄音逝她,去河邊找鬼。 笑死睬捶,一個(gè)胖子當(dāng)著我的面吹牛黔宛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播擒贸,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼臀晃,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼觉渴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徽惋,我...
    開封第一講書人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤案淋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后险绘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踢京,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年隆圆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翔烁。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渺氧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蹬屹,到底是詐尸還是另有隱情侣背,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布慨默,位于F島的核電站贩耐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厦取。R本人自食惡果不足惜潮太,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虾攻。 院中可真熱鬧铡买,春花似錦、人聲如沸霎箍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)漂坏。三九已至景埃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顶别,已是汗流浹背谷徙。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驯绎,地道東北人蒂胞。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像条篷,于是被迫代替她去往敵國(guó)和親骗随。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛤织,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

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

  • 組件的生命周期方法分以下三個(gè)階段。 Mounting當(dāng)創(chuàng)建組件的實(shí)例并將其插入到DOM中時(shí)鸿染,將調(diào)用這些方法:con...
    _八神光_閱讀 1,089評(píng)論 0 0
  • Each component has several "lifecycle methods" that you c...
    暮落晨曦閱讀 474評(píng)論 0 0
  • 好比我們?nèi)顺硕虝旱纳c死那一瞬之外指蚜,生命中剩下的時(shí)間都用在了每天活著的狀態(tài),對(duì)于React中的組件來講涨椒,占其總生...
    YeLqgd閱讀 10,463評(píng)論 0 7
  • 又是一個(gè)老生常談的內(nèi)容,從ES6起已經(jīng)開始使用class的方式去創(chuàng)建組件,這種創(chuàng)建方式上的變化也帶來了寫法和方法上...
    殷灬商閱讀 456評(píng)論 0 1
  • 譯自 React Component Lifecycle 每個(gè)組件都有若干生命周期函數(shù)摊鸡。如函數(shù)名稱所示,帶有wil...
    KrisLeeSH閱讀 552評(píng)論 0 0