react 新版生命周期

React16 之后有三个生命周期被废弃(但并没有删除)

  1. componentWillMount
  2. componentWillReceiveProps
  3. componentWillUpdate

官方计划在17版本完全删除这三个函数,只保留UNSAVE_前缀的三个函数,目的是为了向下兼容,但是对于开发者而言应该尽量避免使用他们,而是使用新增的生命周期函数替代它们。

目前React 16.8+ 的生命周期氛围三个阶段,分别是挂载阶段,更新阶段,卸载阶段

挂载阶段

  1. constructor: 构造函数,最先被执行,我们通常在构造函数里初始化 state 对象或者给自定义方法绑定this
  2. getDerivedStateFromProps: static getDerivedStateFromProps(nextProps, prevState),这是个静态方法,此方法必须要有返回值,返回一个对象,或者返回 null,返回 null 则不更新任何内容, 当我们接收到新的属性想去修改state, 可以使用 getDerivedStateFromProps
  3. render: render函数是纯函数,只返回需要渲染的东西,不应该包含其他的业务逻辑,可以返回原生的DOM、React 组件、Fragment、Portals、字符串和数字、Boolean 和 null 等内容
  4. componentDidMount: 组件状态之后调用,此时我们可以获取到 DOM 节点并操作,比如对 canvas svg 的操作,服务器请求,订阅都可以写在这里,但是记得要在 componentWillunMount 中取消订阅

更新阶段

  1. getDerivedStateFormProps: 此方法在更新挂在阶段都可能回调用
  2. shouldComponnetUpdate: shouldComponentUpdate(nextProps, nextState) 有两个参数 nextProps和 nextState, 标识更新的属性和变化之后的 state, 返回一个布尔值,true 标识会触发重新渲染,false 标识不会触发重新渲染,默认返回 true, 我们通常利用此声明周期来优化 React 程序性能。
  3. render: 更新阶段也会触发此生命周期
  4. getSnapshotBeforeUpdate: getSnapshotBeforeUpdate(prevProps, prevState)这个方法在 render 之后, componentDidUpdate 之前调用,有两个参数 prevProps 和 prevState,标识之前的属性和之前的 state, 这个函数有一个返回值,会作为第三个参数传给 componentDidUpdate,如果不想要返回值, 可以返回 null, 此生命周期必须与 componentDidUpdate 搭配使用
  5. componentDidUpdate: componentDidUpdate(prevProps, prevState, snapshot),该方法在getSnapshotBeforeUpdate方法之后被调用,有三个参数prevProps,prevState,snapshot,表示之前的props,之前的state,和snapshot。第三个参数是getSnapshotBeforeUpdate返回的,如果触发某些回调函数时需要用到 DOM 元素的状态,则将对比或计算的过程迁移至 getSnapshotBeforeUpdate,然后在 componentDidUpdate 中统一触发回调或更新状态。

卸载阶段:

componentWillUnmount: 会在组件卸载以及销毁之前调用,在此方法中执行必要的清理操作,例如,清除定时器,取消网络请求或者清除在 componentDidMount() 中创建的订阅,清理无效的DOM元素等垃圾清理工作

异常处理

  1. static getDerivedStateFromError: 此声明周期会在渲染阶段后代组件抛出错误后被调用,他将抛出的错误作为参数,并返回一个值以更新 state
  2. componentDidCatch: 此生命周期在后代组件抛出错误后背调用,他接受两个参数: error —— 抛出的错误。2. info —— 带有 componentStack key 的对象,其中包含有关组件引发错误的栈信息。componentDidCatch 会在“提交”阶段被调用,因此允许执行副作用。 它应该用于记录错误之类的情况。

参考React官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值