组件生命周期的三个阶段

Mounting(创建阶段)
Updating(更新阶段)
Unmounting(卸载阶段)


旧的生命周期函数:如下图

React16版本 新增的生命周期函数

备注:lnitialization (初始化阶段),会执行constructor()初始化组件需要state,props和函数的绑定(bind)。但constructor属于ES6的语法,本身不属于react。所以严格来讲不算是react的生命周期函数,但是又和生命周期函数的特性符合。在官方文档在示例代码中将其纳入了组件的生命周期函数。

本文,不探究16版本以前的生命周期函数,因为有一些要在17版本废除:

即将的废除的生命周期函数:

官网文档指出使用这些生命周期的代码会在未来版本的react中更容易产生bug,尤其是对于异步渲染的版本

由于未来采用异步渲染机制,所以即将在17版本中去掉的生命周期钩子函数

componentWillMount

componentWillRecieveProps

componentWIllUpdate


新增的生命周期函数

React16版本 新增的生命周期函数


Mounting (挂载阶段)

1. static getDerivedStateFromProps(nextProps, prevState)
这个生命周期函数只要页面update就会被触发

这个生命周期的意思就是根据从props中获取state,实际上就是将传入的props映射到state上面
 返回值是一个对象,这个对象的作用和setState一样用于更新state,返回值为null时,不更新state状态。提供给我们一个在渲染之前操作state的机会(慎用!)
  该方法在每次render(渲染)被调用之前调用,意味着即使你的props没有任何变化,但因为state发生了变化,导致组件重新的render,这个生命周期函数依然会被调用。(父组件渲染导致了组件的重新渲染,即使子组件接收的属性没有更新,这一方法也会被调用)。
 因为该方法为静态方法,所以内部不能使用this关键字。也就是这个函数不能通过this访问到class的属性,也并不推荐直接访问属性。而是应该通过参数提供的nextProps以及prevState来进行判断,根据新传入的props来映射到state。


Updating (更新阶段)

getSnapshotBeforeUpdate(prevProps, prevState)

触发时间: update发生的时候,在render之后可以读取但无法使用DOM的时候。它使您的组件可以在可能更改之前从DOM捕获一些信息(在虚拟DOM转化为真实DOM的前一刻自动调用。这个时间点getSnapshotBeforeUpdate可以用于读取即将被改变的数据);
这一生命周期返回的任何值将会 作为componentDidUpdate的第三个参数。配合componentDidUpdate, 可以覆盖componentWillUpdate的所有用法


错误边界

当任何一个子组件在渲染过程中、在一个生命周期方法中、或在构造函数中发生错误时,这些方法会被调用

static getDerivedStateFromError(error)

在后代组件抛出错误后调用getDerivedStateFromError生命周期。它接收作为错误信息作为参数,并应该返回一个值去更新状态。
被调用是在 “渲染” 阶段,所以不允许副作用。

componentDidCatch(error, info)

任何一处的javascript报错会触发 类似于JS原生的try/catch。可以捕获错误,并处理

关于错误边界和捕获异常的生命周期函数,可以参考
https://stackoverflow.com/questions/52962851/whats-the-difference-between-getderivedstatefromerror-and-componentdidcatch
https://react.docschina.org/docs/error-boundaries.html#component-stack-traces

相关文章:

  • 2021-11-12
  • 2022-12-23
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
  • 2022-01-18
  • 2022-12-23
猜你喜欢
  • 2022-01-05
  • 2021-05-24
  • 2021-11-26
  • 2022-12-23
  • 2021-09-02
  • 2021-08-01
相关资源
相似解决方案