學習本系列內容須要具有必定 HTML 開發基礎,沒有基礎的朋友能夠先轉至 HTML快速入門(一) 學習react
本人接觸 React Native 時間並非特別長,因此對其中的內容和性質瞭解可能會有所誤差,在學習中若是有錯會及時修改內容,也歡迎萬能的朋友們批評指出,謝謝算法
文章初版出自簡書,若是出現圖片或頁面顯示問題,煩請轉至 簡書 查看 也但願喜歡的朋友能夠點贊,謝謝react-native
ViewDidLoad
來初始化,在React Native中又是在哪裏?這邊從文檔中截取的一張圖並註釋了下,很好地描述了React Native組件的執行順序實例化階段、存在階段、銷燬階段
),其中最常接觸的爲實例化階段,這個階段負責組件的構建和展現的時間,須要咱們根據幾個函數的調用過程,控制好組件的展現和邏輯處理getDefaultProps:該函數用於初始化一些默認屬性,一般會將固定的內容放在這個函數中進行初始化和賦值網絡
this.props
獲取在這裏初始化它的屬性,因爲組件初始化後,再辭使用該組件不會調用 getDefaultProps
函數,因此組件本身不能夠修改props,只可由其餘組件調用它時再外部進行修改getInitialState:該函數用於對組件一些狀態進行初始化數據結構
this.setState
來修改state值var SMZQ = React.createClass({ // 用於設置一些值固定不變或上下界面值傳遞 getDefaultProps(){ return{ number1: 1, number2: 2 } }, // 用於設置一些可變或者用來刷新界面 getInitialState(){ return{ sum:0 } }, render() { return ( <View style={styles.container}> <Text>number1:{this.props.number1}</Text> <Text>number2:{this.props.number2}</Text> <Text>sum:{this.state.sum}</Text> <TouchableOpacity onPress={() => {this.setState({sum: this.props.number1 + this.props.number2})}} > <Text>計算和</Text> </TouchableOpacity> <TouchableOpacity onPress={() => {this.setState({sum: this.state.sum + 1})}} > <Text>和的基礎上+1</Text> </TouchableOpacity> </View> ); } });
效果:
框架
this.setState
方法,組件必定會調用render方法,對組件進行再次渲染,不過,React框架會根據DOM的狀態自動判斷是否須要真正渲染componentWillMount:至關於OC中的 ViewWillAppear
方法,在組件簡要被加載到視圖以前調用,沒有太多的功能異步
render:它是每一個組件必需具有的方法,本質上是個函數,而且返回JSX或者其餘組件來構成DOM,和Android的XML佈局相似函數
componentDidMount:在調用了render方法,組件加載成功並被成功渲染出來以後,所要執行的後續操做,通常都會在這個函數中進行,好比常常要面對的網絡請求等加載數據操做佈局
this.state:開發中,組件確定要與用戶互動,React的一大創新就是將組件當作一個狀態機,一開始有一個初始狀態,而後用戶互動,致使狀態變化,從而觸發從新渲染UI,舉個例子性能
var SMZQ = React.createClass({ // 用於設置一些可變或者用來刷新界面 getInitialState(){ return{ isPositive: true, content:'5是否是負數' } }, render() { return ( <View style={styles.container}> <TouchableOpacity onPress={() => {this.dealWithState(this.state.isPositive, 5)}} > <Text>{this.state.content}</Text> </TouchableOpacity> </View> ); }, dealWithState: function (data:Boolean, num:int) { var isPositive, content; if (num > 0){ isPositive = false; content = '值不是負數'; }else { isPositive = true; content = '值是負數'; } this.setState({ isPositive: isPositive, content: content }); } });
效果:
獲取真實的DOM節點
var SMZQ = React.createClass({ render() { return ( <View ref="mainView" style={styles.container}> <TouchableOpacity onPress={() => {this.dealWithState()}} > <Text>值</Text> </TouchableOpacity> <TextInput ref="mytextInput"></TextInput> </View> ); }, dealWithState: function () { // 讓輸入框得到焦點 this.refs.mytextInput.focus(); // 查看內容屬性 console.log(this.refs.mainView); } });
效果: