小生愛


  
            const log = (...value) => console.log(...value)

            import ReactDOM from 'react-dom'
            import React, { Component, PropTypes } from 'react';

            class Clock extends React.Component {
              constructor (props) {
                super(props)
                /**
                 *  this.state: 定义可读写的初始状态 通过this.state读取
               */
                this.state = {
                  date: new Date(),
                }
              }

              // 页面渲染完成后调用
              componentDidMount() {
                this.timerID = setInterval(
                  v => this.tick(),
                  1000
                )
              }

              // 组件从挂在点移除时调用     
              componentWillUnmount() {
                clearInterval(this.timerID)
              }

              // setState 可以是异步的 所以使用如下2种方式解决
              // 每次修改状态 都会自动调用this.render 再次渲染组件
              tick () {
                /**
                 * setState((prevState, props) => ({ key: value })) 方法一 返回一个对象列表 函数体要带括号
                     prevState: 当前状态对象
                     props: 当前的props对象
               */
                this.setState(
                  (prevState, props) => ({
                    date: new Date()
                  })
                )

                /**
                 * setState(obj, callback): 方式二
                     obj: 状态的对象列表
                     callback: 状态更新后的回调函数
               */
                this.setState(
                  {
                    date: new Date()
                  },
                  () => {
                    // 回调函数
                  }
                )
              }

              render () {
                return (
                  <div>
                    <h3>{this.state.date.toLocaleTimeString()}</h3>
                  </div>
                )
              }
            }

            const App = () => {
              return (
                <div>
                  <Clock />
                  <Clock />
                  <Clock />
                </div>
              )
            }

            ReactDOM.render(
              // 可以用这种方式引入 自定义组件
              <App />,
              document.querySelector('#box')
            )