zoukankan      html  css  js  c++  java
  • 11 React 组件生命周期

    组件的生命周期可分成三个状态

    • Mounting:已插入真实 DOM
    • Updating:正在被重新渲染
    • Unmounting:已移出真实 DOM

    生命周期的方法有:

      • componentWillMount 在渲染前调用,在客户端也在服务端。

      • componentDidMount : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。

      • componentWillReceiveProps 在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。

      • shouldComponentUpdate 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
        可以在你确认不需要更新组件时使用。

      • componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。

      • componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。

      • componentWillUnmount在组件从 DOM 中移除之前立刻被调用。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    <title>React 实例</title>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    </head>
    <body>
    <div id="example"></div>
    
    <script type="text/babel">
    class Button extends React.Component {
      constructor(props) {
          super(props);
          this.state = {data: 0};
          this.setNewNumber = this.setNewNumber.bind(this);
      }
      
      setNewNumber() {
        this.setState({data: this.state.data + 1})
      }
      render() {
          return (
             <div>
                <button onClick = {this.setNewNumber}>INCREMENT</button>
                <Content myNumber = {this.state.data}></Content>
             </div>
          );
        }
    }
    
    
    class Content extends React.Component {
      componentWillMount() {
          console.log('Component WILL MOUNT!')
      }
      componentDidMount() {
           console.log('Component DID MOUNT!')
      }
      componentWillReceiveProps(newProps) {
            console.log('Component WILL RECEIVE PROPS!')
      }
      shouldComponentUpdate(newProps, newState) {
            return true;
      }
      componentWillUpdate(nextProps, nextState) {
            console.log('Component WILL UPDATE!');
      }
      componentDidUpdate(prevProps, prevState) {
            console.log('Component DID UPDATE!')
      }
      componentWillUnmount() {
             console.log('Component WILL UNMOUNT!')
      }
     
        render() {
          return (
            <div>
              <h3>{this.props.myNumber}</h3>
            </div>
          );
        }
    }
    ReactDOM.render(
       <div>
          <Button />
       </div>,
      document.getElementById('example')
    );
    </script>
    
    </body>
    </html>
  • 相关阅读:
    flume,kafka不在一个内网互相打通.md
    尚硅谷Flink2020教程.md
    常用命令.md
    四象限工作效率-事件管理.md
    甘特图目标实施-进度管控.md
    PDCA循环法.md
    SMART大目标拆解小目标.md
    基于内外部竞争环境和竞争条件下的态势分析
    使用Java正则表达式批量提取文本信息
    使用markdown高效编写博客(创建标题)
  • 原文地址:https://www.cnblogs.com/liufei1983/p/14509622.html
Copyright © 2011-2022 走看看