React中的state

定义

一个组件的显示形态可以由数据状态和外部参数所决定,外部参数也就是props,而数据状态就是state。
首先,在组件初始化的时候,通过this.state给组件设定一个初始的state,在第一次render的时候就会用这个数据来渲染组件。

state的修改

state不同于props的一点是,state是可以被改变的。不过,不可以直接通过this.state=的方式来修改,而需要通过this.setState()方法来修改state。
当我们调用this.setState方法时,React会更新组件的数据状态state,并且重新调用render方法,也就是会对组件进行重新渲染。

state作用

state的主要作用是用于组件保存、控制以及修改自己的状态,它只能在constructor中初始化,它算是组件的私有属性,不可通过外部访问和修改。

事件处理绑定的三种方式

官方推荐

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/react.development.js"></script>
    <script src="js/react-dom.development.js"></script>
    <script type="text/javascript" src="js/babel.min.js"></script>
    <script type="text/babel">
        class Hello extends React.Component {
            constructor() {
                super();
                // 在构造器中声明绑定
                this.state = {flag: true};
                this.isClick = this.bindClick.bind(this);
            }

            bindClick() {
                this.setState({flag: !this.state.flag});
            };

            render() {
                return (<button onClick={this.isClick}> {this.state.flag ? '打开' : '关闭'} </button>);
            }
        }

        ReactDOM.render(<Hello></Hello>, document.getElementById("my"));
    </script>
</head>
<body>
<div id="my"></div>
</body>
</html>

简单方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/react.development.js"></script>
    <script src="js/react-dom.development.js"></script>
    <script type="text/javascript" src="js/babel.min.js"></script>
    <script type="text/babel">
      class Hello extends React.Component{
        constructor() {
          super();
          this.state = { flag: true };
        }

        handleClick() {
          this.setState({ flag: !this.state.flag });
        };

        render () {
          return (
            <button onClick={this.handleClick.bind(this)}>
              {this.state.flag ? '打开':'关闭'}
            </button>
          );
        }
      }
      ReactDOM.render(<Hello></Hello>, document.getElementById("my"));
  </script>
</head>
<body>
<div id="my"></div>
</body>
</html>

箭头函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/react.development.js"></script>
    <script src="js/react-dom.development.js"></script>
    <script type="text/javascript" src="js/babel.min.js"></script>
    <script type="text/babel">
      class Hello extends React.Component{
        constructor() {
          super();
          this.state = { flag: true };
        }

        handleClick() {
          this.setState({ flag: !this.state.flag });
        };

        render () {
          return (
            <button onClick={() => this.handleClick()}>
              {this.state.flag ? '打开':'关闭'}
            </button>
          );
        }
      }
      ReactDOM.render(<Hello></Hello>, document.getElementById("my"));
    </script>
</head>
<body>
<div id="my"></div>
</body>
</html>

版权声明:本文为LeonArdo_Netsr原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。