react基础语法(四) state学习

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
        <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
        <!-- 生产环境中不建议使用 -->
        <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
    </head>

    <body>
        <div id="app">

        </div>
        <script type="text/babel">
        //React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)
        //自顶向下或单向数据流 任何状态始终由某些特定组件所有,并且从该状态导出的任何数据或 UI只能影响树中下方的组件
        class Clock extends React.Component {
          constructor(props) {
            super(props);
            this.state = {
                date: new Date(),
                num:10
                };//定义一个初始state
            console.log(this.state,'state')
          }
          //在组件输出到 DOM 后会执行 componentDidMount()钩子 在第一次渲染后调用,只在客户端。
          //之后组件已经生成了对应的DOM结构;可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作;
          componentDidMount() {
              console.log('挂载')
            this.timerID = setInterval(
              () => self.tick(),
              1000
            );
            //转成普通函数式
//            let that = this;  //that 组件类 Clock的this;
//            this.timerID = setInterval(function () {
//              return that.tick();
//            },1000);
          }
          //一旦 Clock 组件被从 DOM 中移除,React 会调用 componentWillUnmount()这个钩子函数,定时器也就会被清除;
          //在组件从 DOM 中移除之前立刻被调用。
          componentWillUnmount() {
              console.log('卸载')
            clearInterval(this.timerID);
          }
          //setState() 来调度UI更新
          tick() {
            this.setState({
              date: new Date()
            });
          }
          render() {
            return (
              <div>
                <h1>Hello, react!</h1>
                <h2>现在是 {this.state.date.toLocaleTimeString()}.</h2>
                <h2>数字加 {this.state.num + 10 + 'string'}.</h2>
              </div>
            );
          }
        }
        ReactDOM.render(
          <Clock />,
          document.getElementById('app')
        );
        </script>
    </body>

</html>

 

posted @ 2018-11-08 15:23  鱼樱前端  阅读(312)  评论(0编辑  收藏  举报