React生命周期看这个就够了

263 阅读2分钟

React生命周期看起来的勾子很多,各种状态的不同调用,实际上是指可以分为三类:初始化阶段,更新阶段和销毁阶段。下面我们就围绕着这三个阶段来详细讲解一下。

生命周期完整流程图:

image.png

第一个阶段:初始化阶段

image.png

首先是初始化阶段,constructor()构造函数中,初始化props、state的值。构造函数中通过super(props)继承父类的一些方法,同时也创建this。下图中为component的几个方法,我们需要继承,也需要通过传入props去实例化。

image.png

接着是componentWillMount(),此阶段dom元素并未生成,我们可以在这里进行一些前置操作,但平时使用场景极少。

接着就是render阶段,render的过程实质上进行了几部操作。分为:构建虚拟dom树,diff算法,页面渲染这三步。

初始化阶段的最后就是componentDidMount()的生命周期,页面已经生成dom树了,但是我们需要进行一些init的操作,比如说进行一些前置的http请求。 整个初始化阶段,除了render()之外,其他操作在整个生命周期中仅执行此一次。

第二阶段:更新阶段

image.png

第二个阶段中主要进行着更新进行的。也是生命周期函数中带有参数的几个勾子。

  1. componentWillReceiveProps(nextProps):此方法会接收到来自父组件中变化了nextProps,然后我们拿着nextPorps和this.props进行比对,看是否要进行一些更新操作。

  2. shouldComponentUpdate(nextProps, nextState):根据字面意思理解---是否应该更新。该生命周期中会接收nextProps和nextState的两个参数值,我们可以根据里面具体的值,然后再结合场景来判断我是否应该刷新。函数返回boolean值,ture:刷新|false:不刷新,可用于性能优化,写出更多高质量的代码。

  3. componentWillUpdate(nextProps, nextState):当shouldComponentUpdate返回true后,会进入该方法中,然后我们再进行业务上的处理,无论是http请求还是页面逻辑调整。

  4. 接着render.....

  5. componentDidUpdate(preProps, preState):和componentDidMount类似,但componentDidMount仅在初始化时执行一次,后面所有的render操作之后都会进入componentDidUpdate。不过平时使用过程中,该组件用得较少。

第三阶段:销毁阶段

image.png

componentWillUnmount():此操作主要是在组件销毁阶段进行的一些额外操作。比如销毁removeEventListern、clearInterval、cleaTimeout、以及一些警告。顺便提一下警告,出现警告的原因一般是当我们有一些异步请求完成后,需要我们更新dom,而此时组件已经被卸载后引起的,一般处理方法如下:

image.png

总结:react的生命周期没那么复杂,平时多注意总结。(注:代码编写语义化还是很重要的)