學習本系列內容需要具備一定 HTML 開發基礎,沒有基礎的朋友可以先轉至 HTML快速入門(一) 學習
本人接觸 React Native 時間並不是特別長,所以對其中的內容和性質了解可能會有所偏差,在學習中如果有錯會及時修改內容,也歡迎萬能的朋友們批評指出,謝謝
文章第一版出自簡書,如果出現圖片或頁面顯示問題,煩請轉至 簡書 查看 也希望喜歡的朋友可以點贊,謝謝
ViewDidLoad
來初始化,在React Native中又是在哪裡?這邊從文檔中截取的一張圖並注釋了下,很好地描述了React Native組件的執行順序
實例化階段、存在階段、銷毀階段
),其中最常接觸的為實例化階段,這個階段負責組件的構建和展示的時間,需要我們根據幾個函數的調用過程,控制好組件的展示和邏輯處理
this.props
獲取在這裡初始化它的屬性,由於組件初始化後,再辭使用該組件不會調用 getDefaultProps
函數,所以組件自己不可以修改props,只可由其他組件調用它時再外部進行修改
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
方法,在組件簡要被加載到視圖之前調用,沒有太多的功能
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
});
}
});
效果:
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);
}
});
效果: