React Native的生命周期

無論是Android里的Activity還是iOS里的Controller都有生命周期這樣的概念,RN也不例外。

RN的生命周期整體上分為四個階段:

一.創(chuàng)建階段:getDefaultProps

該函數(shù)用于初始化一些默認的屬性,通常會將固定的內(nèi)容放在這個函數(shù) 中進行初始化和賦值;? ? 在組件中,可以利用this.props獲取在這里初始化它的屬性,由于組件初始化后,再次使用該組件不會調(diào)用getDefaultProps函數(shù),所以組件自己不可以自己修改props(即:props可認為是只讀的),只可由其他組件調(diào)用它時在外部修改。


二.實例化階段

實例化階段會連續(xù)調(diào)用四個方法:

getInitialState,componentWillMount,render,componentDidMount

(1)getInitialState? ? ? ??

該函數(shù)是用于對組件的一些狀態(tài)進行初始化;? ? ??

由于該函數(shù)不同于getDefaultProps,在以后的過程中,會再次調(diào)用,所以可以將控制控件的狀態(tài)的一些變量放在這里初始化,如控件上顯示的文字,可以通過this.state來獲取值,通過this.setState來修改state值, 比如:

this.setState({

? ? ? ? ?title:'Hello'

});

?? ? ?注意:一旦調(diào)用了this.setState方法,組件一定會調(diào)用render方法,對組件進行再次的渲染,不過,如果React框架會自動根據(jù)DOM的狀態(tài)來判斷是否需要真正的渲染。

(2)componentWillMount

? ? ? 相當于OC中的ViewWillAppear方法,在組件將要被加載在視圖上之前調(diào)用

(3)render? ? ??

? ? ? render是一個組件中必須有的方法,本質(zhì)上是一個函數(shù),并返回JSX或其他組件來構(gòu)成DOM,和Android的XML布局類似,注意:只能返回一個頂級元素 ;? ? ? 此外,在render函數(shù)中,只可通過this.state來獲取值,而不能用this.setState去設(shè)置值

(4)componentDidMount? ? ??

? ? ? ?在調(diào)用了render方法后,組件加載成功并被成功渲染出來以后,所要執(zhí)行的后續(xù)操作,一般會在這個函數(shù)中處理網(wǎng)絡(luò)請求等加載數(shù)據(jù)的操作;? ? ? 因為UI已經(jīng)成功被渲染出來, 所以放在這個函數(shù)里進行請求操作,不會出現(xiàn)UI上的錯誤。最簡單的,我們可以在這里面寫一行this.setState方法來驗證調(diào)用步驟。


三.更新階段

更新階段主要發(fā)生在用戶操作之后或父控件有更新的時候,此時會根據(jù)用戶的操作行為進行相應(yīng)的頁面結(jié)構(gòu)的調(diào)整。

(1)componentWillReceiveProps

指父元素對組件的props進行了修改。this.props一般認為是只讀的,如果想修改,只能是在父控件調(diào)用setProps方法。

(2)shouldComponentUpdate? ??

在接收到新的 props 或者 state,將要渲染之前調(diào)用。該方法在初始化渲染的時候不會調(diào)用,在使用forceUpdate方法的時候也不會。

如果確定新的 props 和 state 不會導(dǎo)致組件更新,則此處應(yīng)該返回 false。

(3)componentWillUpdate

在接收到新的 props 或者 state 之前立刻調(diào)用。在初始化渲染的時候該方法不會被調(diào)用。

使用該方法做一些更新之前的準備工作。注意,在該方法中,不能再調(diào)用this.setState方法

(4)componentDidUpdate

在組件的更新已經(jīng)同步到 DOM 中之后立刻被調(diào)用。該方法不會在初始化渲染的時候調(diào)用。

使用該方法可以在組件更新之后操作 DOM 元素。


四.銷毀階段

componentWillUnmount

在該方法中執(zhí)行任何必要的清理,比如無效的定時器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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