React.js 组件生命周期 - 更新阶段
更新生命周期可以由两个事件触发:
- 父组件更新 props
- 本地状态发生变化
父组件更新 props
- componentWillReceiveProps(nextProps) −
- 这是在 props 发生变化时调用的第一个方法。它包含一个参数 nextProps,表示新更改的 props。
- 在这里,如果需要,我们可以将本地状态与 props 同步。
- 如果状态不需要与 props 同步,则可能不需要实现此方法。
- 应避免在此处引发副作用。因为如果在此处使用副作用,可能会导致重新渲染或性能问题。
现在,componentWillReceiveProps 已被弃用,并由静态方法 getDerivedStateFromProps(props,state) 替换。顾名思义,该方法清楚地表明了其用途。
每当我们想要从新的 props 中计算或派生状态时,都应该使用上述方法。
- shouldComponentUpdate(nextProps, nextState) −
- 此方法返回一个布尔值 true 或 false。根据返回值,React 执行 render 方法,该方法更新实际的 DOM。
- 如果需要,我们可以在此方法中添加自定义逻辑,例如比较一些变量以决定更新过程。
- 应避免副作用。
- ComponentWillUpdate(nextProps, nextState) −
- 当 shouldComponentUpdate 返回 true 时,此方法执行一次。
- 这可能是将状态与 props 同步的更好位置,因为它肯定即将渲染。
在此处也应避免副作用。
现在,componentWillUpdate 已被弃用。最新的方法是 getSnapshotBeforeUpdate,它可以在极少数情况下使用。例如,识别元素的滚动位置。此方法在实际更新 DOM 之前执行。
- Render −
- render 方法的执行决定了在与虚拟 DOM 比较后需要更新实际 DOM 的哪些更改。
- 像往常一样,它将根据更新条件准备 jsx 代码。
- 它还将处理子组件的更新。
- 我们可以从 render 方法中返回几乎任何东西,例如布尔值、null、字符串、数组、div、片段等。
- componentDidUpdate
- 在这里,我们可以执行副作用。
- 但是使用 setState 更新状态应该谨慎操作。它应该仅在有条件的情况下更新,以避免无限的 API 调用循环。
- 因为 componentDidUpdate 在每次 render 方法调用后的每次更新时都会被调用。
由内部更改触发的更新
- 如果使用 setState 更改了 state 对象,则会调用此更新周期。此周期从 shouldComponentUpdate 直接开始,因为我们在上面显示的其他方法处理 props,而这里我们没有更改 props。
- shouldComponentUpdate 之后的调用层次结构将保持不变。
shouldComponentUpdate=>componentWillUpdate=>render=>更新子组件=>componentDidUpdate
可以使用浏览器开发者工具检查实际 DOM 上元素的更新,以查看影响或性能问题。
如果我们使用 F12 或检查元素,并点击该检查窗口右侧的三个垂直点,我们可以看到以下选项。

点击更多工具=>渲染

点击复选框“绘制闪烁”。每当页面上的元素更新时,它都会突出显示。
使用此工具是为了检查哪些元素正在更新,并查找任何性能问题。我们可以使用此工具避免不必要地更新某些元素。
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP