跳到主要内容

componentWillUpdate

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

一、认识


componentWillUpdate: 可以意味着在更新之前,此时的 DOM 还没有更新。在这里可以做一些获取 DOM 的操做。就比如说在一次更新中,保存 DOM 之前的信息(记录上一次位置)。但是 React 已经出了新的生命周期 getSnapshotBeforeUpdate 来代替

作用: 获取组件更新之前的状态。比如 DOM 元素位置等

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

  • UNSAFE_componentWillMount

  • UNSAFE_componentWillReceiveProps

  • UNSAFE_componentWillUpdate

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