MST

星途 面试题库

面试题:深入理解 React 生命周期的执行机制

假设在 React 组件的 componentDidMount 方法中发起了一个异步请求,在请求返回数据后调用 setState 更新组件状态。请详细描述从发起请求到组件重新渲染这一过程中,React 生命周期各个阶段的执行顺序和机制,并且说明如果在此过程中组件接收到新的 props,生命周期会如何变化。
30.0万 热度难度
前端开发React

知识考点

AI 面试

面试题答案

一键面试

1. 从发起请求到组件重新渲染过程

  1. componentDidMount
    • 该生命周期方法在组件挂载到 DOM 后立即调用。在此处发起异步请求,例如使用 fetch 或者 axios 等库。
    • 此时组件已经在 DOM 中呈现,但数据可能还未从异步请求获取到。
  2. 异步请求过程
    • 发起的异步请求在后台执行,不会阻塞 JavaScript 主线程。React 应用可以继续响应用户交互等操作。
  3. 请求返回数据
    • 当异步请求成功返回数据后,调用 setState 方法。
    • setState 不会立即更新组件状态,而是将状态更新放入队列中。
  4. shouldComponentUpdate
    • React 会调用 shouldComponentUpdate 方法,该方法默认返回 true
    • 它的作用是判断组件是否需要更新。如果返回 false,则后续的更新过程将被跳过,组件不会重新渲染。开发者可以在此方法中通过比较前后的 propsstate 来进行性能优化,决定是否真正需要更新组件。
  5. render
    • shouldComponentUpdate 返回 true,React 会调用 render 方法。
    • render 方法根据最新的 propsstate 计算并返回新的 React 元素树。
  6. componentDidUpdate
    • 在组件更新后(即新的 DOM 已经渲染完成),componentDidUpdate 方法被调用。
    • 可以在此方法中执行一些副作用操作,比如操作更新后的 DOM,或者根据新的状态发起新的网络请求等。

2. 过程中接收到新的 props 时生命周期变化

  1. componentWillReceiveProps(已废弃,16.3 版本之前)
    • 在接收到新的 props 但还未更新之前调用。可以在此方法中根据新的 props 来更新 state
  2. getDerivedStateFromProps(16.3 及之后)
    • 这是一个静态方法,在接收到新的 props 时被调用,并且在 render 方法之前。
    • 它的返回值会被用于更新 state。通常用于根据 props 的变化来更新 state,但不建议在此方法中执行副作用操作。
  3. shouldComponentUpdate
    • 同样会被调用,用于判断是否需要根据新的 propsstate 更新组件。
  4. render
    • 如果 shouldComponentUpdate 返回 true,会调用 render 方法,根据新的 propsstate 渲染新的 React 元素树。
  5. componentDidUpdate
    • 在组件因为新的 props 更新完成后调用,可以在此执行一些依赖于更新后 DOM 或新状态的操作。