生命周期簡介
像 Android 開發(fā)一樣秀菱,React Native(RN) 中的組件也有生命周期(Lifecycle)。
這張圖很簡潔直觀地告訴我們,生命周期的整個流程以及階段劃分叉谜。
第一階段
getDefaultProps -> getInitialState -> componentWillMount ->render ->componentDidMount。 事實上擒抛,每個組件都會經(jīng)歷這個流程生命周期,是一個組件創(chuàng)建跟加載的過程早直。
getDefaultProps和getInitialState是對state跟props的初始化和設(shè)置,當(dāng)然現(xiàn)在比較流行的寫法肆汹,是直接在contructor構(gòu)造器中直接對這兩個狀態(tài)進行設(shè)置
compinentWillMount:該方法可以進行一些業(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é)
生命周期 調(diào)用次數(shù) 能否使用setSate()
getDefaultProps 1(全局調(diào)用一次) 否
getInitialState 1 否
componentWillMount 1 是
render >=1 否
componentDidMount 1 是
componentWillReceiveProps >=0 是
shouldComponentUpdate >=0 否
componentWillUpdate >=0 否
componentDidUpdate >=0 否
componentWillUnmount 1 否
如果覺得此文不錯饵史,麻煩幫我點下“喜歡”。么么噠胜榔!