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>
  • 相关阅读:
    如何设置nginx日志格式来查看负载分担结果
    Nginx缓存使用官方教程及常见问题解答
    nginx缓存和flask_cache
    flask_wtf/wtforms几个坑点,先简单记此
    maven-dependency-plugin插件的使用
    maven+jenkins+jmeter性能测试:maven把项目依赖拷贝到项目指定位置
    sudo:抱歉,您必须拥有一个终端来执行 sudo 解决办法;ssh执行sudo命令的方法;给用户增加sudo免密权限
    innerHTML引起IE的内存泄漏
    innerHTML与IE浏览器内存泄露问题
    IE内存泄露与无法回收研究小结
  • 原文地址:https://www.cnblogs.com/liufei1983/p/14509622.html
Copyright © 2011-2022 走看看