ReactNative之屬性Props、State(四)

前言

眼看很多公司都開始嘗試使用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
    }

});
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容