React组件的生命周期

168 阅读2分钟

组件的生命周期

React的生命周期从广义上分为三个阶段:Mounting(挂载)、更新(update)、Unmounting(卸载)

react生命周期.png

每个组件都包含 “生命周期方法”,用于在组件不同阶段执行自定义功能。在组件被创建并插入到 DOM 时(即挂载中阶段(mounting)),组件更新时,组件取消挂载或从 DOM 中删除时,都有可以使用的生命周期方法。

生命周期的各个阶段

挂载阶段

在创建组件时,会最先执行constructor()中的函数并初始化数据,页面完成初次渲染render(),并且每次组件渲染都会触发render(),在组件挂载(完成DOM渲染)后会触发componentDidMount(),可以在这里调用请求,进行DOM操作。

钩子函数触发时机作用
constructor()创建组件时,最先执行1. 初始化state 2. 创建Ref等
render()每次组件渲染都会触发渲染UI(注意: 不能调用setState()
componentDidMount组件挂载(完成DOM渲染)后1. 发送网络请求 2.DOM操作

更新阶段

每当组件的状态或道具发生变化时 New props ;setate() ;forceUpdate(),组件就会更新并重新渲染, componentDidUpdate()在更新后会被立即调用,首次渲染不会执行此方法,可以获取到更新后的DOM内容,不需要调用setState。

钩子函数触发时机作用
render()每次组件渲染都会触发渲染UI(与 挂载阶段 是同一个render)
componentDidUpdate()组件更新(完成DOM渲染)后DOM操作,可以获取到更新后的DOM内容,不需要调用setState()

卸载阶段

当从组件中移除时会调用componentWillUnmount(),会在组件卸载及销毁之前直接调用。在此方法中执行必要的清理操作。

钩子函数触发时机作用
componentWillUnmount()组件卸载(从页面中消失)执行清理工作(比如:清理定时器或取消网络请求等)

运行阶段生命周期调用顺序

运行中阶段可以使用的函数 :

  • componentWillReceiveProps : 父组件修改属性触发,可以修改新属性,修改状态
  • shouldComponentUpdate : 返回false会阻止render调用
  • componentWillUpdate : 不能修改属性和状态
  • render : 只能访问this.props和this.state,只有一个顶层组件,不允许修改状态和DOM输出
  • componentDidUpdate : 可以修改DOM