前端/移动开发面试题更新 2026-08-05

在 React 中,调用 setState 后会触发哪些生命周期函数?

前端/移动开发技术原理React

考察说明

考查对 React 类组件中 setState 触发生命周期流程的理解

回答思路

  1. 【回答框架 1】在类组件中,调用 setState 会触发更新流程。首先,若 shouldComponentUpdate 存在,会以新的 state 和 props 调用它,返回 false 则跳过后续更新。
  2. 【回答框架 2】若未阻止更新,componentWillUpdate 会被调用(在 React 16.3 之后更名为 UNSAFE_componentWillUpdate),随后渲染 render 方法,生成新的虚拟 DOM。
  3. 【回答框架 3】更新 DOM 之后,componentDidUpdate 会被调用,它接收 prevProps 和 prevState 作为参数,可在此进行 DOM 操作或发起网络请求。
  4. 【回答框架 4】若组件是 PureComponent 或有 shouldComponentUpdate 浅比较,state 值未变化时可能不会触发更新,从而不调用这些生命周期。
  5. 【回答框架 5】在 React 16.3 之后,UNSAFE_componentWillUpdate 和 componentWillUpdate 在严格模式下会收到警告,建议使用 componentDidUpdate 或 getSnapshotBeforeUpdate 等替代方案。
  6. 【关键点 1】setState 触发更新时,会依序调用 shouldComponentUpdate、UNSAFE_componentWillUpdate、render、componentDidUpdate。
  7. 【关键点 2】如果 shouldComponentUpdate 返回 false,则不会调用后续的生命周期函数。
  8. 【关键点 3】getSnapshotBeforeUpdate 会在 render 之后、DOM 更新之前调用,其返回值会作为 componentDidUpdate 的第三个参数。
  9. 【关键点 4】在 React 18 中,使用并发特性时,生命周期函数的调用时机可能发生变化,推荐使用函数组件和 Hooks。
  10. 【易错点 1】不应在 componentDidUpdate 中无条件下调用 setState,否则会导致无限循环。
  11. 【易错点 2】UNSAFE_componentWillUpdate 是旧生命周期,应避免在新代码中使用,因为它可能在并发模式下被多次调用。
  12. 【易错点 3】setState 是异步的,不能依赖它立即更新后的 state 值,应使用回调或 componentDidUpdate 读取最新值。