React Native組件的生命周期

React Native組件的生命周期

可以說整個React Native應(yīng)用是由各種類型的組件構(gòu)成讯壶。而每個組件都有其各自的生命周期唱凯。組件由初生到消亡湿痢,React Native框架通過不同的生命周期方法慕爬,為我們提供了方便切入組件生命周期的鉤子膀斋,讓我們可以在正確的時間點做正確的事情似将。

當應(yīng)用啟動获黔,React Native框架在內(nèi)存中維護著一個虛擬DOM樹。所謂組件的生命周期即由組件初始化并掛載到虛擬DOM為起始在验,到組件由虛擬DOM卸載為終結(jié)玷氏,組件的不同狀態(tài)。生命周期方法則是組件在虛擬DOM樹不同狀態(tài)的描述腋舌。

理解組件的生命周期方法是理解組件生命周期的關(guān)鍵盏触,現(xiàn)在就讓我們來詳細探究組件的生命周期方法。

生命周期方法

組件的生命周期方法對應(yīng)著組件的不同生命階段块饺,通常我們分為三個階段:組件初始化及掛載階段赞辩、組件運行期階段及組件卸載階段。

  • 初始化及掛載階段

一授艰、這是組件類的構(gòu)造函數(shù)辨嗽,通常在此初始化state數(shù)據(jù)模型。

constructor(props) {
  super(props);
  this.state = {
    //key : value
  };
}

二淮腾、表示組件將要加載到虛擬DOM糟需,在render方法之前執(zhí)行,整個生命周期只執(zhí)行一次谷朝。

componentWillMount() {

}

三洲押、表示組件已經(jīng)加載到虛擬DOM,在render方法之后執(zhí)行圆凰,整個生命周期只執(zhí)行一次杈帐。通常在該方法中完成異步網(wǎng)絡(luò)請求或者集成其他JavaScript庫。

componentDidMount() {

}
  • 運行期階段

一送朱、在組件接收到其父組件傳遞的props的時候執(zhí)行,參數(shù)為父組件傳遞的props娘荡。在組件的整個生命周期可以多次執(zhí)行。通常在此方法接收新的props值驶沼,重新設(shè)置state炮沐。

componentWillReceiveProps(nextProps) {
  this.setState({
    //key : value
  });
}

二、在componentWillReceiveProps(nextProps)執(zhí)行之后立刻執(zhí)行回怜;或者在state更改之后立刻執(zhí)行大年。該方法包含兩個參數(shù)换薄,分別是propsstate。該方法在組件的整個生命周期可以多次執(zhí)行翔试。如果該方法返回false轻要,則componentWillUpdate(nextProps, nextState)及其之后執(zhí)行的方法都不會執(zhí)行,組件則不會進行重新渲染垦缅。

shouldComponentUpdate(nextProps, nextState) {
  return true;
}

二冲泥、在shouldComponentUpdate(nextProps, nextState)函數(shù)執(zhí)行完畢之后立刻調(diào)用,該方法包含兩個參數(shù)壁涎,分別是propsstate凡恍。render()函數(shù)執(zhí)行之前調(diào)用。該方法在組件的整個生命周期可以多次執(zhí)行怔球。

componentWillUpdate(nextProps, nextState) {

}

三嚼酝、在render()方法執(zhí)行之后立刻調(diào)用。該方法包含兩個參數(shù)竟坛,分別是propsstate闽巩。該方法在組件的整個生命周期可以多次執(zhí)行。

componentDidUpdate(preProps, preState) {

}

四担汤、render方法用于渲染組件涎跨。在初始化階段和運行期階段都會執(zhí)行。

render() {
  return(
    <View/>
  );
}
  • 卸載階段

一漫试、在組件由虛擬DOM卸載的時候調(diào)用六敬。

componentWillUnmount() {

}

生命周期方法的執(zhí)行流

下面我們通過實例來演示上述生命周期方法在整個React Native應(yīng)用具體的執(zhí)行流程,讓大家對React Native應(yīng)用數(shù)據(jù)流動以及組件的渲染過程有更加清晰的認識驾荣。

初始化組件

現(xiàn)在我們來初始化一個名為itemView的組件,觀察哪些生命周期方法會在組件初始化的時候執(zhí)行以及它們的執(zhí)行順序普泡。

lifecycle.png

上圖點擊創(chuàng)建View的button播掷,會初始化一個View組件在屏幕上,然后切換到控制臺可以看到組件在初始化的時候方法的執(zhí)行順序撼班。

001.png

如圖歧匈,可以看到在初始化itemView的時候,依次調(diào)用constructor砰嘁、componentWillMount件炉、rendercomponentDidMount,而其他方法則不會調(diào)用矮湘。

卸載組件

現(xiàn)在我們刪除剛才創(chuàng)建的itemView斟冕,觀察哪些方法會執(zhí)行。

002.png

如圖缅阳,可以看到只有componentWillUnmount方法會執(zhí)行磕蛇。通常在該方法清理定時器或者監(jiān)聽。

更改state

我們在itemView內(nèi)部設(shè)置一個定時器,過5秒自動更改stateitem屬性的值為'reRender'秀撇,觀察哪些方法執(zhí)行超棺。

this.timer = setTimeout(() => {
  this.setState({
    item:'reRender'
  });
}, 5000);
003.png

如圖,shouldComponentUpdate呵燕、componentWillUpdate棠绘、rendercomponentDidUpdate執(zhí)行。并且itemView的propsr仍然是初始化時候的值create再扭,而state則改變?yōu)?code>reRender弄唧。

傳遞props

最后,我們由父組件向itemView傳遞props霍衫,值為reset候引。

004.png

如圖,可以看到當父組件向子組件傳遞props的時候敦跌,componentWillReceiveProps會被調(diào)用澄干,并且輸出傳遞的props的值。

以上就是組件的生命周期方法在不同的情況下的執(zhí)行流程柠傍。上面的情況已經(jīng)基本包括React Native應(yīng)用組件活動的全部狀態(tài)麸俘。

生命周期方法的完整流程圖

下圖是組件的生命周期方法完整的流程,通過這張圖以及上面的解釋惧笛,我們可以對生命周期方法有一個完整的認識从媚。

React Native組件的生命周期.png

理解組件的生命周期不僅能夠幫助我們更好的運用組件構(gòu)建應(yīng)用,更是優(yōu)化React Native應(yīng)用組件渲染性能的關(guān)鍵患整,希望通過本文拋磚引玉拜效,希望大家能夠?qū)M件的生命周期有更深入的理解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末各谚,一起剝皮案震驚了整個濱河市紧憾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昌渤,老刑警劉巖赴穗,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膀息,居然都是意外死亡般眉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門潜支,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甸赃,“玉大人,你說我怎么就攤上這事毁腿〖危” “怎么了苛茂?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸠窗。 經(jīng)常有香客問我妓羊,道長,這世上最難降的妖魔是什么稍计? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任躁绸,我火速辦了婚禮,結(jié)果婚禮上臣嚣,老公的妹妹穿的比我還像新娘净刮。我一直安慰自己,他們只是感情好硅则,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布淹父。 她就那樣靜靜地躺著,像睡著了一般怎虫。 火紅的嫁衣襯著肌膚如雪暑认。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天大审,我揣著相機與錄音蘸际,去河邊找鬼。 笑死徒扶,一個胖子當著我的面吹牛粮彤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姜骡,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼导坟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了溶浴?” 一聲冷哼從身側(cè)響起乍迄,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎士败,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褥伴,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡谅将,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了重慢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饥臂。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖似踱,靈堂內(nèi)的尸體忽然破棺而出隅熙,到底是詐尸還是另有隱情稽煤,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布囚戚,位于F島的核電站酵熙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏驰坊。R本人自食惡果不足惜匾二,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拳芙。 院中可真熱鬧察藐,春花似錦、人聲如沸舟扎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睹限。三九已至譬猫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邦泄,已是汗流浹背删窒。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顺囊,地道東北人肌索。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像特碳,于是被迫代替她去往敵國和親诚亚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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