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

    整个组件,从创建组件类开始,到渲染,到消亡的过程,就是组件的生命周期。

    组件的生命周期可以分为三个阶段:

    1.   挂载阶段
    2.   更新阶段
    3.   卸载阶段
    • 挂载阶段

      在这个过程中,会触发以下几个事件

                    getDefaultProps,设置默认属性

                    getInitialState,设置初始状态

                    componentWillMount 即将挂载     

                    render 渲染,就是挂载

                    componentDidMount 挂载完成

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script type="text/javascript" src="js/react.min.js" ></script>
            <script type="text/javascript" src="js/react-dom.min.js" ></script>
            <script type="text/javascript" src="js/browser.min.js" ></script>
        </head>
        <body>
            <div id="app"></div>
            <script type="text/babel">
                var Box = React.createClass({
                    //设置默认值
                    getDefaultProps:function(){
                        alert("设置默认属性");
                        return{title:'这里是标题'};
                    },
                    //设置初始状态
                    getInitialState : function(){
                        alert("设置初始状态");
                        return {step:"挂载阶段"};
                    },
                    // 即将挂载 
                    componentWillMount : function(){
                        alert("即将挂载");
                    },
                    //挂载、渲染
                    render : function(){
                        alert("正在渲染...");
                        return (
                        <div>
                            <h3>组件的生命周期</h3>
                            <p>当前的状态值是:{this.state.step}</p>
                        </div>
                            
                        );
                    },
                    //完成挂载
                    componentDidMount : function(){
                        alert("挂载完成");
                    }
                    
                });
                
                ReactDOM.render(<Box />,document.getElementById("app"));
            </script>
        </body>
    </html>
    •  更新阶段

    提供了如下一个钩子(方法):

    compoentwillReceiveProps,即将接受上一级的属性传递- 比较少用

    shouldCompnetUpdate,是否应该进行更新操作

    componentWillUpdate,即将进行更新操作

    render,重新渲染

    componentDidUpdate,更新完成

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script type="text/javascript" src="js/react.min.js" ></script>
            <script type="text/javascript" src="js/react-dom.min.js" ></script>
            <script type="text/javascript" src="js/browser.min.js" ></script>
        </head>
        <body>
            <div id="app"></div>
            <script type="text/babel">
                var Box = React.createClass({
                    //设置默认值
                    getDefaultProps:function(){
                        alert("设置默认属性");
                        return{title:'这里是标题'};
                    },
                    //设置初始状态
                    getInitialState : function(){
                        alert("设置初始状态");
                        return {step:1};
                    },
                    // 即将挂载 
                    componentWillMount : function(){
                        alert("即将挂载");
                    },
                    //挂载、渲染
                    render : function(){
                        alert("正在渲染...");
                        return (
                        <div>
                            <h3>组件的生命周期</h3>
                            <p>当前的状态值是:{this.state.step}</p>
                            <button onClick={this.handleClick}>更新</button>
                        </div>
                            
                        );
                    },
                    //完成挂载
                    componentDidMount : function(){
                        alert("挂载完成");
                    },
                    //完成更新操作
                    handleClick : function(){
                        this.setState({
                            step : this.state.step + 1
                        });
                    },
        
                    shouldComponentUpdate: function(nextProps, nextState) {
                        alert('是否应该更新');
                        return true;
                    },
                    componentWillUpdate : function(nextProps, nextState) {
                        alert('即将更新');
                    }, 
                    componentDidUpdate: function(prevProps, prevState) {
                        alert('更新完毕');
                    }
    
                    
                });
                
                ReactDOM.render(<Box />,document.getElementById("app"));
            </script>
        </body>
    </html>
    • 卸载阶段

      在组件卸载的时候,进入卸载阶段。只有一个方法 --- componentWillUnmount

      当组件消失了,从ui界面上删除了,才会进入卸载阶段呢。

      ReactDOM提供了一个方法,用于卸载组件

      ReactDOM.unmountComponentAtNode(document.getElementById('app'));

      <!DOCTYPE html>
      <html>
          <head>
              <meta charset="UTF-8">
              <title></title>
              <script type="text/javascript" src="js/react.min.js" ></script>
              <script type="text/javascript" src="js/react-dom.min.js" ></script>
              <script type="text/javascript" src="js/browser.min.js" ></script>
          </head>
          <body>
              <div id="app"></div>
              <script type="text/babel">
                  var Box = React.createClass({
                      //设置默认值
                      getDefaultProps:function(){
                          alert("设置默认属性");
                          return{title:'这里是标题'};
                      },
                      //设置初始状态
                      getInitialState : function(){
                          alert("设置初始状态");
                          return {step:1};
                      },
                      // 即将挂载 
                      componentWillMount : function(){
                          alert("即将挂载");
                      },
                      //挂载、渲染
                      render : function(){
                          alert("正在渲染...");
                          return (
                          <div>
                              <h3>组件的生命周期</h3>
                              <p>当前的状态值是:{this.state.step}</p>
                              <button onClick={this.handleClick}>更新</button>
                              <button onClick={this.handleUnmount}>卸载组件</button>
                          </div>
                              
                          );
                      },
                      //完成挂载
                      componentDidMount : function(){
                          alert("挂载完成");
                      },
                      //完成更新操作
                      handleClick : function(){
                          this.setState({
                              step : this.state.step + 1
                          });
                      },
          
                      shouldComponentUpdate: function(nextProps, nextState) {
                          alert('是否应该更新');
                          return true;
                      },
                      componentWillUpdate : function(nextProps, nextState) {
                          alert('即将更新');
                      }, 
                      componentDidUpdate: function(prevProps, prevState) {
                          alert('更新完毕');
                      },
                      
                      handleUnmount : function(){
                          ReactDOM.unmountComponentAtNode(document.getElementById("app"));
                      },
          
                      componentWillUnmount() {
                          alert('即将卸载');    
                      },
                      componentDidMount: function() {
                          alert('挂载完毕');
                      }
                      
                  });
                  
                  ReactDOM.render(<Box />,document.getElementById("app"));
              </script>
          </body>
      </html>

      在上述三个阶段中:

      比较特殊的就是render,render在挂载阶段和更新阶段都会执行。挂载阶段只执行一次,但是更新阶段,可以重复执行。

      React的根据状态进行更新的机制,和组件的生命周期机制是紧密相连的

    生命是一场华丽的绽放!
  • 相关阅读:
    BUCK/BOOST电路原理分析
    boost升压电路原理
    NPN/PNP和N沟道/P沟道负载的接法
    常用电源芯片记录
    LDO和BUCK降压稳压器对比
    some nets were not able to be matched
    Altium PCB布局时快速摆放元件的技巧
    树莓派+android things+实时音视频传输demo之遥控小车
    野狗产品与价格
    librtmp将本地FLV文件发布到RTMP流媒体服务器
  • 原文地址:https://www.cnblogs.com/clown3/p/6213205.html
Copyright © 2011-2022 走看看