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

组件生命周期的三个阶段

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


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

在这里插入图片描述

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

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

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

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

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

componentWillMount

componentWillRecieveProps

componentWIllUpdate


新增的生命周期函数

在这里插入图片描述


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值