面试题答案
一键面试1. 从发起请求到组件重新渲染过程
componentDidMount
:- 该生命周期方法在组件挂载到 DOM 后立即调用。在此处发起异步请求,例如使用
fetch
或者axios
等库。 - 此时组件已经在 DOM 中呈现,但数据可能还未从异步请求获取到。
- 该生命周期方法在组件挂载到 DOM 后立即调用。在此处发起异步请求,例如使用
- 异步请求过程:
- 发起的异步请求在后台执行,不会阻塞 JavaScript 主线程。React 应用可以继续响应用户交互等操作。
- 请求返回数据:
- 当异步请求成功返回数据后,调用
setState
方法。 setState
不会立即更新组件状态,而是将状态更新放入队列中。
- 当异步请求成功返回数据后,调用
shouldComponentUpdate
:- React 会调用
shouldComponentUpdate
方法,该方法默认返回true
。 - 它的作用是判断组件是否需要更新。如果返回
false
,则后续的更新过程将被跳过,组件不会重新渲染。开发者可以在此方法中通过比较前后的props
和state
来进行性能优化,决定是否真正需要更新组件。
- React 会调用
render
:- 当
shouldComponentUpdate
返回true
,React 会调用render
方法。 render
方法根据最新的props
和state
计算并返回新的 React 元素树。
- 当
componentDidUpdate
:- 在组件更新后(即新的 DOM 已经渲染完成),
componentDidUpdate
方法被调用。 - 可以在此方法中执行一些副作用操作,比如操作更新后的 DOM,或者根据新的状态发起新的网络请求等。
- 在组件更新后(即新的 DOM 已经渲染完成),
2. 过程中接收到新的 props
时生命周期变化
componentWillReceiveProps
(已废弃,16.3 版本之前):- 在接收到新的
props
但还未更新之前调用。可以在此方法中根据新的props
来更新state
。
- 在接收到新的
getDerivedStateFromProps
(16.3 及之后):- 这是一个静态方法,在接收到新的
props
时被调用,并且在render
方法之前。 - 它的返回值会被用于更新
state
。通常用于根据props
的变化来更新state
,但不建议在此方法中执行副作用操作。
- 这是一个静态方法,在接收到新的
shouldComponentUpdate
:- 同样会被调用,用于判断是否需要根据新的
props
和state
更新组件。
- 同样会被调用,用于判断是否需要根据新的
render
:- 如果
shouldComponentUpdate
返回true
,会调用render
方法,根据新的props
和state
渲染新的 React 元素树。
- 如果
componentDidUpdate
:- 在组件因为新的
props
更新完成后调用,可以在此执行一些依赖于更新后 DOM 或新状态的操作。
- 在组件因为新的