本文為轉(zhuǎn)載文章,只因原作者寫的太好了,讀完瞬間理解,原網(wǎng)址:http://blog.csdn.net/u012583459/article/details/52999564
20170511182906291.png
這張圖很簡潔直觀地告訴我們,生命周期的整個流程以及階段劃分。
第一階段
getDefaultProps -> getInitialState -> componentWillMount ->render ->componentDidMount。 事實上,每個組件都會經(jīng)歷這個流程生命周期,是一個組件創(chuàng)建跟加載的過程。
- getDefaultProps和getInitialState是對state跟props的初始化和設(shè)置,當(dāng)然現(xiàn)在比較流行的寫法,是直接在contructor構(gòu)造器中直接對這兩個狀態(tài)進(jìn)行設(shè)置
- compinentWillMount中,可以進(jìn)行一些業(yè)務(wù)的初始化,或者訂閱RN廣播。特別注意的是,在整個生命周期中,該方法只會被調(diào)用一次。
render,渲染方法,絕對不能在該方法調(diào)用改變狀態(tài)的的方法(setState)! - componentDidMount,主要作用是通知組件已經(jīng)加載完成。需要注意的是,RN 框架是先調(diào)用子組件的 componentDidMount() ,然后調(diào)用父組件的函數(shù)。該方法在整個生命周期中也是只調(diào)用一次!
第二階段
運行中 ->屬性(props)改變( 父層界面發(fā)生改變) ->componentWillReceiveProps->shouldComponentUpdate—true—>componentWillUpdate ->render->componentDidUpdate ->運行中。當(dāng)然還有運行中—(狀態(tài)發(fā)生改變)—>shouldComponentUpdate-…, 該過程發(fā)生在用戶界面交互過程中。
- componentWillReceiveProps:如果組件收到新的屬性(props),就會調(diào)用該方法。在這個回調(diào)函數(shù)里面,你可以根據(jù)屬性的變化,通過調(diào)用 this.setState() 來更新你的組件狀態(tài),這里調(diào)用更新狀態(tài)是安全的,并不會觸發(fā)額外的 render() 調(diào)用。
- shouldComponentUpdate:默認(rèn)情況下,這個函數(shù)永遠(yuǎn)返回 true 用來保證數(shù)據(jù)變化的時候 UI 能夠同步更新
- componentWillUpdate:其函數(shù)原型:void - componentWillUpdate(object nextProps, object nextState),在這個方法中,可以做一些在更新界面之前要做的東西。不過在這里面,你就不能使用 this.setState 來修改狀態(tài)。這個函數(shù)調(diào)用之后,就會把 nextProps 和 nextState 分別設(shè)置到 this.props 和 this.state 中。這個函數(shù)執(zhí)行完,緊接著就會調(diào)用 render() 來更新界面了。
- componentDidUpdate:調(diào)用了 render() 更新完成界面之后,會調(diào)用 componentDidUpdate() 來得到通知
第三階段
卸載前->componentWillUnmount ->結(jié)束
- componentWillUnmount:當(dāng)組件要被從界面上移除的時候,就會調(diào)用該方法,可以在該方法中做一些清理的工作,比如清除RN廣播,清除數(shù)據(jù)等
總結(jié)
WechatIMG173.jpeg