react-native學習筆記之 生命週期
剛開始接觸RN時時一臉懵逼,由於之前沒怎麼搞過前端開發,所以看網上的例子和原始碼都是一頭霧水。iOS中有viewDidLoad(初始化介面)、viewWillAppear(佈局)、viewWillDisappear、viewDidAppear幾個狀態方便我們掌握程式的動向。
一個React Native元件的生命週期分為例項化、存在期和銷燬期,其中最常用的為例項化期,該時期即元件的構建、展示時期,需要開發者根據幾個函式的呼叫過程,控制好元件的展示和邏輯的處理。能為了更好理解好別人的程式碼和原始碼更近了一步
(1)例項化期分為5個階段,每個階段以一個函式來進行控制,具體如下:
![2368622-101446cd09beeb38.png](https://i.iter01.com/images/ee713087f3ab6e228cf61a61db37d7f20b4ca9fc02939a75975e0df6839228e5.png)
getDefaultProps:顧名思義,這裡會初始化一些預設的屬性,通常會將固定的內容放在這個過程中進行初始化和賦值,一個控制元件可以利用this.props獲取在這裡初始化它的屬性,由於元件初始化後,再次使用該元件不會呼叫getDefaultProps函式,所以元件自己不可以自己修改props(即:props可認為是隻讀的),只可由其他元件呼叫它時在外部修改。所以無法呼叫
this.setProps({
showText:'Hello world'
});
此函式呼叫在getInitialState:函式之前不過在ES6中已經不是當前的呼叫形式在ES6中如下呼叫
//ES6 這兩個屬性不能解除安裝class內
class CTestDemo extends Component{
render()
{return(
<Text>{this.props.showText}</Text>
);}
}
CTestDemo.propTypes={
//屬性校驗期,表示改屬性必須是bool,否則報錯
showText:React.PropTypes.bool
};
CTestDemo.defaultProps={//設定預設屬性
showText:'Hello world'
};
getInitialState:這裡是對控制元件的一些狀態進行初始化,由於該函式不同於getDefaultProps,在以後的過程中,會再次呼叫,所以可以將控制控制元件的狀態的一些變數放在這裡初始化,如控制元件上顯示的文字,可以通過this.state來獲取值,通過this.setState來修改state值,修改方式如下:
getInitialState(){
return{
showText:'Hello world'
}
}
this.setState({
showText:'Hello world'
});
以上方法也是ES5的寫法,最新的ES6寫法有變更
constructor(props){
super(props);
this.state={
showText:'Hello world'
}
}
以上都是ES5和ES6的區別本質上都是一樣的,
componentWillMount:可以通過字面意思看出,這個方法被呼叫時期是元件將要被載入在檢視上之前,功能比較少,即:render一個元件前最後一次修改state的機會。相當於iOS中的viewWillAppear
render:上面已經說過render是一個元件必須有的方法,形式為一個函式,並返回JSX或其他元件來構成DOM,和Android的XML佈局、WPF的XAML佈局類似,只能返回一個頂級元素,即:值得注意的是,一旦呼叫了this.setState方法,控制元件必將呼叫render方法,對控制元件進行再次的渲染.不過,如果React框架會自動根據DOM的狀態來判斷是否需要真正的渲染
componentDidMount:即呼叫了render方法後,元件載入成功並被成功渲染出來以後所執行的hook函式,一般會將網路請求等載入資料的操作,放在這個函式裡進行,來保證不會出現UI上的錯誤,相當於ios中的viewDidAppear如圖所示,_fetchData利用了fetch API來非同步請求Web API來載入商品資料:
![2368622-54752cac8ec50c4a.png](https://i.iter01.com/images/4cc686244616b4bca136ea88f626c33485ead55b86af91b8f3df0a8e056d202c.png)
(2)存在期主要是用來處理與使用者的互動,如:點選事件,都比較簡單,也不是很常用,具體有以下幾個過程:
componentWillReceiveProps:指父元素對元件的props或state進行了修改
shouldComponentUpdate:一般用於優化,可以返回false或true來控制是否進行渲染
componentWillUpdate:元件重新整理前呼叫,類似componentWillMount
componentDidUpdate:更新後的hook
(3)銷燬期,用於清理一些無用的內容,如:點選事件Listener,只有一個過程:componentWillUnmount
3.總結
![2368622-6bd69da6b3787dc6.png](https://i.iter01.com/images/0a36b42342d7b1acf5c4c625c292ead08773eadae958f984249e708723a02fc1.png)
總得來講,React Native元件的生命週期,經歷了Mount->Update->Unmount這三個大的過程,即從建立到銷燬的過程,如果藉助iOS的開發思想,那麼React Native元件的生命週期就更容易理解了。那麼,我們構建一個React Native控制元件也就能夠知道如何下手,如何控制和優化。經過一層一層的封裝和呼叫,一個完整的React Native應用也就構建出來了。
相關文章
- React生命週期學習筆記React筆記
- Vue學習筆記(2)—— Vue的生命週期Vue筆記
- react-native生命週期改造React
- react生命週期筆記React筆記
- JSP筆記-生命週期JS筆記
- 學習vue生命週期Vue
- rust學習十一.3、生命週期標記Rust
- iOS初級開發學習筆記:APP生命週期的學習總結iOS筆記APP
- <react學習筆記(8)>生命週期回顧與再認識React筆記
- 【三】Kubernetes學習筆記-Pod 生命週期與 Init C 介紹筆記
- vue生命週期整理學習Vue
- Angular學習(二):元件-生命週期Angular元件
- ReactJS前端學習-元件生命週期ReactJS前端元件
- Vue生命週期函式.個人筆記Vue函式筆記
- docker筆記23-pod的生命週期Docker筆記
- angular4學習記錄 — 元件通訊、生命週期Angular元件
- flutter學習日記(三)————Flutter的生命週期和路由Flutter路由
- Vue學習(三)生命週期函式Vue函式
- ES 筆記三十三: 分片及其生命週期筆記
- iOS開發筆記(九):UIViewController的生命週期iOS筆記UIViewController
- vue系列之生命週期Vue
- react之元件生命週期React元件
- Android之各生命週期Android
- EntityFramework 學習【Entity Lifecycle 實體生命週期】Framework
- Vue原始碼學習(八):生命週期呼叫Vue原始碼
- Mybatis學習-配置、作用域和生命週期MyBatis
- 品牌生命週期和產品生命週期之間的關係
- React-生命週期雜記React
- Java開發學習(五)----bean的生命週期JavaBean
- vue 基礎入門筆記 09:生命週期函式Vue筆記函式
- 生命週期
- <react學習筆記(3)>屬性與狀態以及元件的生命週期(初始化階段)React筆記元件
- Spring生命週期管理之總結Spring
- Android全面解析之Activity生命週期Android
- View生命週期與Activity生命週期的關係View
- 用Flutter做APP學習心得:Flutter widget的生命週期FlutterAPP
- vue - 生命週期第二次學習與理解Vue
- vue - 生命週期Vue
- Fragment生命週期Fragment