美文网首页React Native
React Native - React State(状态)

React Native - React State(状态)

作者: 村雨灬龑 | 来源:发表于2017-10-27 09:16 被阅读114次

    我们使用两种数据来控制一个组件:props和state。props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变。 对于需要改变的数据,我们需要使用state。

    一般来说,你需要在constructor中初始化state(译注:这是ES6的写法,早期的很多ES5的例子使用的是getInitialState方法来初始化state,这一做法会逐渐被淘汰),然后在需要修改时调用setState方法。

    //当state发生变化时,会调用组件内部的render方法

    class RNTalk extends Component {
      //点击按钮触发事件,更改状态
      _checkAction(){
        this.setState({
          isCheck: !this.state.isCheck,
        });
      }
      //定义初始化状态 isCheck
      constructor(props){
        super(props);
       this.state = {isCheck:false,};
      }
      render() {
        //根据当前状态 来显示对应的点击状态
        var textTitle = this.state.isCheck?'已选中':'未选中';
        return (
          <View style={styles.container}>
            <Button title = {textTitle} onPress = {()=>
              this._checkAction()
              }>
            </Button>
          </View>
        );
      }
    }
    
    需求:定义一个组件,将用户在输入框内输入的内容进行实时的显示
     _handleChange(text){
        this.setState({
          text: text,
        });
      }
      //定义初始化状态 isCheck
      constructor(props){
        super(props);
        this.state = {
          text: 'Useless Placeholder' ,
        };
      }
      render() {
        return (
          <View style={styles.container}>
            <TextInput
            style={styles.inputContainer}
            onChangeText={(text) => this._handleChange(text)}
            value={this.state.text}
            />
            <Text>
              {this.state.text}
            </Text>
          </View>
        );
      }
    }
    
     //ES5的写法
      var CheckButton = React.createClass({
        //定义初始状态
        getInitialState: function(){
          return {
            //在这个对象中设置的属性,将会存储在state中
            //默认状态,未选中
            isCheck: false
          }
    
        },
        //定义事件的绑定方法
        handleChange:function(){
          //修改状态值,通过this.state读取设置的状态值
          this.setState({
            isCheck: !this.state.isCheck
          });
        },
        render: function(){
          //根据状态值设置显示的文字
          //在JSX语法中,不能直接使用if,使用三目运算符
          var text = this.state.isCheck ? "已选中":"未选中";
          return(
            <div>
            <input type="checkbox" onChange={this.handleChange} />
            {text}
            </div>
          );
        }
      });
    
      ReactDOM.render(
        <CheckButton />,
        document.getElementById("container")
      );
    

    注意:
    1.避免在组件内部修改 this.props,请把props 当作是只读的。
    2.使用this.setState来设置状态,而不要使用this.state直接修改状态

    相关文章

      网友评论

        本文标题:React Native - React State(状态)

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