MST

星途 面试题库

面试题:React更新阶段生命周期钩子的调用顺序及原理

详细阐述React组件在更新阶段,getDerivedStateFromProps、shouldComponentUpdate、render、getSnapshotBeforeUpdate、componentDidUpdate这些钩子的调用顺序,并解释为什么会按照这样的顺序调用,以及它们各自在更新流程中的作用。
28.1万 热度难度
前端开发React

知识考点

AI 面试

面试题答案

一键面试

调用顺序

  1. getDerivedStateFromProps
  2. shouldComponentUpdate
  3. render
  4. getSnapshotBeforeUpdate
  5. componentDidUpdate

顺序原因及作用解释

  1. getDerivedStateFromProps
    • 顺序原因:在接收到新的propsstate变化时首先调用,以便在组件实例化后以及接收新的props时更新state
    • 作用:这是一个静态方法,它接收propsstate作为参数,返回一个对象来更新state,用于根据props的变化来更新state,例如当props传递的数据变化时,同步更新state
  2. shouldComponentUpdate
    • 顺序原因:在getDerivedStateFromProps之后调用,因为已经更新了可能依赖propsstate,此时可以根据新的propsstate来决定是否需要更新组件。
    • 作用:接收nextPropsnextState作为参数,返回一个布尔值。返回true表示组件需要更新,返回false则阻止组件更新,用于性能优化,避免不必要的渲染。
  3. render
    • 顺序原因:在确定组件需要更新(shouldComponentUpdate返回true)后调用,因为只有确定要更新才需要重新生成虚拟DOM。
    • 作用:根据当前的propsstate返回一个React元素,用于描述UI,是组件的核心渲染方法,生成虚拟DOM。
  4. getSnapshotBeforeUpdate
    • 顺序原因:在render之后调用,因为此时已经生成了新的虚拟DOM,即将更新真实DOM,可在更新前获取DOM相关信息。
    • 作用:接收prevPropsprevState作为参数,返回一个值,这个返回值会作为componentDidUpdate的第三个参数。主要用于在真实DOM更新之前捕获一些信息,比如滚动位置等。
  5. componentDidUpdate
    • 顺序原因:在真实DOM更新完成后调用,因为此时DOM已经更新,可进行副作用操作。
    • 作用:接收prevPropsprevStatesnapshotgetSnapshotBeforeUpdate的返回值)作为参数,用于执行副作用操作,比如更新DOM后进行网络请求、操作第三方库等。