本帖最后由 Sian 于 2017-12-25 23:15 编辑  
 
1、生命周期的三个状态: 
1.1、Mounting:组件挂载,已插入真实DOM 
1.2、Updating:组件更新,正在被重新渲染 
1.3、Unmounting:组件移除,已移出真实DOM 
 
2、四个阶段,分别是:创建阶段-->实例化阶段-->更新阶段-->销毁阶段 
 
3、相关方法 
3.1、Mounting/组件挂载相关: 
- componentWillMount
 
组件将要挂载,在render之前执行,但仅执行一次! - componentDidMount
 
组件已经挂载,在render执行之后,同样只执行一次! 
  3.2、Updating/组件更新相关: 
- componentWillReveiveProps
 
已经加载的组件在接收新(非初始化,而是更新)的属性时调用 - shouldComponentUpdate
 
在接收到新的state或prpos时调用,返回bool值决定下面两个方法是否执行 - componentWillUpdate
 - componentDidUpdate
 
  3.3、Unmounting/组件移除相关 
 
4、实例 
4.1、创建阶段 
- getDefaultProps
 - 4.2、实例化阶段
 - getInitialState
 - componentWillMount
 - render
 - componentDidMount
 
  4.3、更新阶段 
- componentWillReceiveProps
 - shouldComponentUpdate
 - componentWillUpdate
 - render
 - componentDidUpdate
 
  4.4、销毁阶段 
 
5、代码演示 
[JavaScript] 纯文本查看 复制代码 /**
     * React生命周期
     1、三个状态:
        Mounting:组件挂载,已插入真实DOM
        Updating:组件更新,正在被重新渲染
        Unmounting:组件移除,已移出真实DOM
     2、四个阶段,分别是:创建阶段-->实例化阶段-->更新阶段-->销毁阶段
     3、相关方法
        3.1、Mounting/组件挂载相关:
          A>componentWillMount
            组件将要挂载,在render之前执行,但仅执行一次,即使多次重复渲染或改变state也只执行一次
          B>componentDidMount
            组件已经挂载,在render执行之后,同一个组件重复渲染只执行一次
        3.2、Updating/组件更新相关:
          A>componentWillReceiveProps
            已加载组件将要接收到新的props之前调用(更新),组件初始化时不会执行!
          B>shouldComponentUpdate
            组件接收到的新的props或state时执行,返回bool值来决定是否更新,并决定下面两个方法是否执行
          C>componentWillUpdate
            组件将要更新
          D>componentDidUpdate
            组件已经完成更新
        3.3、Unmounting/组件移除相关方法
          A>componentWillUnmount
            组件将要被移除时调用,用来执行一些必要的清理工作
        3.4、生命周期中props与state相关
          A>getDefaultProps 设置Props的默认属性值
          B>getInitialState 设置state的默认属性值
      4、代码示例
     */
     var Demo = React.createClass({
       /**
        * 一、创建阶段
        1、getDefaultProps方法
        */
        getDefaultProps:function(){
          console.log("getDefaultProps");
          return{};
        },
        /**
         * 二、实例化阶段
         1、getInitialState
         2、componentWillMount
         3、render
         4、componentDidMount
         */
         getInitialState:function(){
           console.log("getInitailState");
           return {
             name : "sian"
           }
         },
         componentWillMount:function(){
           console.log("componentWillMount");
         },
         render:function(){
           console.log("render");
           var text = this.state.name;
           return <p>Hello {text}!</p>;
         },
         componentDidMount:function(){
           console.log("componentDidMount");
         },
         /**
          * 三、更新阶段
          1、componentWillReceiveProps
          2、shouldComponentUpdate
          3、componentWillUpdate
          4、render
          5、componentDidUpdate
          */
          componentWillReceiveProps:function(){
            console.log("componentWillReceiveProps");
          },
          shouldComponentUpdate:function(){
            console.log("shouldComponentUpdate");
            return true;
          },
          componentWillUpdate:function(){
            console.log("componentWillUpdate");
          },
          componentDidUpdate:function(){
            console.log("componentDidUpdate");
          },
          /**
           * 四、销毁阶段
           1、componentWillUnmount
           */
          componentWillUnmount:function(){
            console.log("componentWillUnmount");
          }
     });
     console.log("第一次创建并加载组件");
     ReactDOM.render(
       <Demo />,
       document.getElementById("container")
     );
     console.log("重新渲染组件");
     ReactDOM.render(
       <Demo />,
       document.getElementById("container")
     );
     console.log("销毁组件");
     ReactDOM.unmountComponentAtNode(document.getElementById("container")); 
5.1、控制台输出的结果为:[JavaScript] 纯文本查看 复制代码 getDefaultProps
第一次创建并加载组件
getInitailState
componentWillMount
render
componentDidMount
重新渲染组件
componentWillReceiveProps
shouldComponentUpdate
componentWillUpdate
render
componentDidUpdate
销毁组件
componentWillUnmount  
6、在线效果演示:http://www.yusian.com/react/lifecycle/index.html 
 |