前言
眼看很多公司都开始尝试使用ReactNative,达到跨平台开发,最近也写了很多文章,希望让更多想了解的同学快速上手ReactNative.
如果喜欢我的文章,可以关注我微博:袁峥Seemygo
ReactNative之组件属性(Props、State)
- 在App开发中,少不了组件之间的传值,在RN中组件之间通信需要用到Props和State。
Props(属性)
- 什么是Props?一般用于自定义组件,大多数组件在创建时就可以使用各种参数来进行定制,用于定制的这些参数就称为props(属性)。
- name:就是Props,通过this.props.name访问
<Room name="小码哥" />
- 注意:props是在父组件中指定,而且一经指定,在整个组件的生命周期中都不再改变。
- 使用
class Room extends Component {
render() {
return (
<View style={styles.viewStyle}>
<Text sytle={styles.textStyle}>欢迎来到{this.props.name}直播间</Text>
</View>
);
}
}
export default class ReactDemo extends Component {
render() {
return (
<Room name="小码哥" />
);
}
}
const styles = StyleSheet.create({
viewStyle:{
flex:1,
justifyContent:'center',
alignItems:'center',
},
textStyle:{
marginTop:20
}
});
- 效果
State
-
State:如果以后想修改某个属性,就修改界面,就需要用state。
-
注意:State属性一般在constructor中声明(ES6),在setState中修改数据.
-
定义state属性
this.state = {
num:1,
};
- 修改state属性
this.setState({
num : number
})
-
每隔一秒,人数+1,定时器
-
注意:这里定时器方法必须用bind.
-
使用
// 自定义房间组件
class Room extends Component {
timeUpdate() {
var number = this.state.num;
number++;
this.setState({
num : number
})
}
// 构造方法
constructor(props){
super(props);
// 定义state属性
this.state = {
num:1,
};
console.log('初始化对象');
// 创建定时器 1秒 = 1000
// 这里必须绑定,bind会生成了一个新的函数,并且由绑定者调用,否则this不明确
setInterval(this.timeUpdate.bind(this),1000);
}
render() {
return (
<View style={styles.viewStyle}>
<Text sytle={styles.textStyle}>欢迎来到{this.props.name}直播间</Text>
<Text>观众数 {this.state.num}</Text>
</View>
);
}
}
// 主组件
export default class ReactDemo extends Component {
render() {
return (
<Room name="小码哥" />
);
}
}
const styles = StyleSheet.create({
viewStyle:{
flex:1,
justifyContent:'center',
alignItems:'center',
},
textStyle:{
marginTop:20
}
});
网友评论
import React, { Component } from 'react';
// 加载原生组件
import {
AppRegistry,
StyleSheet,
Text,
View
} from 'react-native';
class Room extends Component {
timeUpdate() {
var number = this.state.num;
number++;
this.setState({
num: number
})
}
constructor(props){
super(props);
this.state = {
num:1,
};
console.log('初始化对象');
setInterval(this.timeUpdate.bind(this), 1000);
}
render() {
return (
<View style={styles.ViewStyle}>
<Text style={styles.textStyle}>欢迎来到{this.props.name}直播间</Text>
<Text>观众数{this.state.num}</Text>
</View>
);
}
}
// 自定义组件,作为程序入口组件
export default class HelloWorld extends Component {
// 当加载组件的时候,就会调用render方法,去渲染组件
render() {
return (
<Room name="xxx" />
);
}
}
// 创建样式表
// 传入一个样式对象, 根据样式对象中的描述,创建样式表
const styles = StyleSheet.create({
ViewStyle: {
flex: 1,
backgroundColor: 'orange',
justifyContent:'center',
alignItems:'center'
},
textStyle:{
marginTop:20
}
});
// 注册组件,程序入口
// 第一个参数:注册模块名称;第二个参数:函数, 此函数返回组件类名,程序启动就会自动去加载这个组件
AppRegistry.registerComponent('HelloWorld', () => HelloWorld);
拿去运行去吧
setInterval(()=>{
this.setState(previousState=>{
num : previousState.num + 1
});
}, 1000);
this.setState(previousState=>({
num : previousState.num + 1
}));
}, 1000);