React.js

2、深入浅出React(二)组件的生命周期

2018-06-04  本文已影响22人  怀念不能

3. 组件生命周期

  1. 三种不同的过程,React库会调用组件的一些成员函数,即生命周期函数。

3.1、装载过程

  1. constructor

ES6中每个类的构造函数,要创建一个组件类的实例,便会调用对应的构造函数
注意:

  1. 并不是每个组件都需要定义自己的构造函数,无状态的React组件往往就不需要定义构造
    函数;
  2. 一个React组件需要构造函数目的:
  • 初始化state,因为组件的生命周期中任何函数都可能要访问state,那么整个周期中第一个被调用的构造函数便是初始化state最理想的地方;
  • 绑定成员函数的this环境:
    • 因为在ES6语法下,类的每个成员函数在执行时的this并不是和类实例自动绑定的;
    • 而在构造函数中this就是当前组件实例,所以,为了方便将来调用,往往在构造函数中将这个实例的特定函数绑定this为当前类实例:
```
   ...
   constructor(props){
      super(props);
      
      this.onClickFunc = this.onClickFunc.bind(this);
   }
 ```
  1. getInitialState和getDefaultProps

    1. getInitialState函数的返回值用来初始化组件的this.state;
    2. getInitialState只出现在装载过程,也就是说一个组件的整个生命周期过程中,这个函数只被调用一次;
    3. getDefaultProps函数的返回值可以作为props的初始值;
    4. 两个函数都只有在使用React.createClass方法创建组件类时才会用到
     const Sample = React.createClass({
       getInitialState: function() {
         return {foo: '返回值将作为this.state的初始值'};
       },
       getDefaultProps: function() {
         return {sampleProp: '作为props的初始值'}
       }
     })
    
    1. React.createClass创建方法已经逐渐被Facebook官方废弃
    2. 使用ES6时,在构造函数中通过this.state赋值完成状态初始化;通过给类属性(注意是类属性,而不是类的实例对象的属性)defaultProps赋值指定的props初始值:
    
    class Sample extends React.Component{
      constructor (props){
        super(props);
        this.state = {foo: '初始值'}
      }
    }
    Sample.defaultProps = {
      sampleProps: 0
    }
    
    
    
  2. render

  1. componentWillMount和componentDidMount
  1. render函数本身并不往DOM树上渲染或者装载内容,它只是返回一个表示JSX表示的对象(及组件实例),然后由React库根据返回的对象决定如何渲染;
  2. 而React库肯定是要把所有组件返回的结果综合起来,才能知道如何产生对应的DOM修改;
  3. 所以只有React库调用所有组件的render函数之后,才有可能完成DOM装载,这时候才会依调用componentDidMount函数作为装载的收尾。
  4. componentWillMount可以在服务器和浏览器端被调用,而componentDidMount只能在浏览器端被调用(因为componentDidMount是在‘装载’完成之后被调用,且‘装载’是一个创建组件并放到DOM树上的过程,而服务器端渲染通过React组件产生的只是一个纯粹的字符串,并不会产生DOM树,即在服务器端不可能完成‘装载过程’所以无法调用componentDidMount)

3.2、更新过程

  1. componentWillReceiveProps(nextProps)
  1. shouldComponentUpdate(nextProps,nextState)
  1. componentWillUpdate和componentDidUpdate

3.2、卸载过程

持续更新中……喜欢请点个赞哦~

上一篇 下一篇

猜你喜欢

热点阅读