跳到主要内容

componentWillReceiveProps

2024年03月06日
柏拉文
越努力,越幸运

一、认识


componentWillReceiveProps: 在更新组件阶段,该生命周期执行驱动是因为父组件更新带来的 props 修改,但是只要父组件触发 render 函数,调用 React.createElement 方法,那么 props 就会被重新创建,生命周期 componentWillReceiveProps 就会执行了。这就解释了即使 props 没变,该生命周期也会执行

作用

  • componentWillReceiveProps 可以用来监听父组件是否执行 render

  • componentWillReceiveProps 可以用来接受 props 改变,组件可以根据 props 改变,来决定是否更新 state ,因为可以访问到 this , 所以可以在异步成功回调(接口请求数据)改变 state 。这个是 getDerivedStateFromProps 不能实现的

版本: 在 React V16.3 componentWillMountcomponentWillReceivePropscomponentWillUpdate 三个生命周期加上了不安全的标识符 UNSAFE,变成了如下形式:

  • UNSAFE_componentWillMount

  • UNSAFE_componentWillReceiveProps

  • UNSAFE_componentWillUpdate

在目前最新的版本 React V17.0.2 也没有废弃这三个生命周期。可能不久之后更高级的版本会被废除吧。**那么为什么要加UNSAFE呢?**首先根据源码,大家有没有发现一个问题,就是这三个生命周期,都是在 render 之前执行的,React 对于执行 render 函数有着像 shouldUpdate 等条件制约,但是对于执行在 render 之前生命周期没有限制,存在一定隐匿风险,如果 updateClassInstance 执行多次,React 开发者滥用这几个生命周期,可能导致生命周期内的上下文多次被执行。