React Native实战开发4:属性和状态

作者: Jeffrey_Hu | 来源:发表于2017-02-01 12:01 被阅读119次

    本教程内容和https://zhiwehu.gitbooks.io/react-native/content/ 同步更新。

    属性和状态

    在接着开发我们的App之前,我们需要理解一下什么是属性(Props)和状态(State)

    属性(Props)

    Props很好理解,一个组件在创建的时候,都会有一些参数,比如长宽高等,这些参数就称为属性,比如html里的<Img>,我们知道有一个src的属性。属性一般是在父组件中创建子组件时传值,而传值之后在子组件的生命周期中值不会发生变化。对于需要改变的数据,我们可以使用状态(State)。属性可以是一个数值,也可以是一个回调函数,这点比较重要,我们后面的例子中将大量使用将回调函数传给子组件的属性。

    我们来看一个属性的例子:我们将导入一个自定义的Button,然后传入了2个属性,其中一个是字符串,而另一个是回调函数。

    import React, { Component } from 'react';
    import { AppRegistry, View } from 'react-native';
    
    import Button from './button';
    
    class Demo extends Component {
      onClick() {
        // 点击处理事件
      }
      
      render() {
        return (
          <View>
            <Button
              text='This is a button'
              onClick={this.onClick.bind(this)}
            />
          </View>
        );
      }
    }
    
    AppRegistry.registerComponent('Demo', () => Demo);
    

    button.js
    我们使用了TouchableOpacity来实现这个自定义的Button,里面的Text读取了this.props.text的值,而onPress方法则使用了属性里传过来的this.props.onClick方法。这样我们就把你组件的方法传给了子组件。

    import React, { Component } from 'react';
    import { View, TouchableOpacity, Text } from 'react-native';
    
    class Button extends Component {
      render() {
        return (
          <View>
            <TouchableOpacity onPress={this.props.onClick}>
              <Text>{this.props.text}</Text>
            </TouchableOpacity>
          </View>
        );
      }
    }
    
    export default Button;
    
    

    在线示例:https://rnplay.org/apps/wKOMyQ

    状态(State)

    State是组件里需要变化的数据,比如一个组件在初始导入数据的时候,我们需要显示一个loading的效果,而当数据导入完成,这个loading效果会消失掉,我们就可以使用一个boolean型的state来实现这一点。State一般是在组件的构造函数里进行初始化,使用this.setState()方法来更新状态值。

    我们来看一个实现loading效果的例子

    • 在constructor()方法里,设置this.state.loadingtrue
    • 在componentWillMount()方法里,执行具体的loading操作,完成后将loading设置为false:this.setState({loading:false})
    • 在render()方法里,根据this.state.loading来判断是否显示loading
    import React, { Component } from 'react';
    import { View, Text } from 'react-native';
    
    class Loading extends Component {
      constructor(props){
        super(props);
        this.state = {
          loading: true
        }
      }
      
      componentWillMount() {
        //loading,完成后,将this.state.loading设置为false
        this.setState({
          loading: false
        })
      }
      
      render() {
        return (
          <View>
            {this.state.loading && <View style={styles.loading}>
              <Text>Loading...</Text>
            </View>}
          </View>
        );
      }
    }
    
    export default Loading;
    
    

    1. React Native实战开发1:搭建开发环境
    2. React Native实战开发2:布局
    3. React Native实战开发3:模块划分
    4. React Native实战开发4:属性和状态
    5. React Native实战开发5:使用TextInput
    6. React Native实战开发6:使用ListView
    7. React Native实战开发7:使用Switch更新todo complete状态
    8. React Native实战开发8: 删除todo item

    相关文章

      网友评论

        本文标题:React Native实战开发4:属性和状态

        本文链接:https://www.haomeiwen.com/subject/vkxlittx.html