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