请说明 React 组件的生命周期是什么含义,并描述各生命周期函数的调用顺序是怎样的?
考察说明
考查对 React 组件生命周期概念和执行顺序的掌握程度。
回答思路
- 【回答框架 1】React 组件生命周期指组件从创建、挂载、更新到卸载的整个过程,期间会调用一系列特定的生命周期方法。在类组件中,这些方法允许我们在特定阶段执行代码,如初始化状态、发起请求、清理资源等。
- 【回答框架 2】挂载阶段依次执行:constructor、static getDerivedStateFromProps、render、componentDidMount。更新阶段当 props 或 state 变化时会依次执行:static getDerivedStateFromProps、shouldComponentUpdate、render、getSnapshotBeforeUpdate、componentDidUpdate。卸载阶段执行 componentWillUnmount,用于清理定时器、取消订阅等。
- 【回答框架 3】React 16.3 之后,部分旧生命周期方法如 componentWillMount、componentWillReceiveProps、componentWillUpdate 被标记为不安全,建议使用新的静态方法和 getSnapshotBeforeUpdate 替代,以确保异步渲染下的安全。
- 【回答框架 4】函数组件本身没有生命周期方法,但可以通过 useEffect Hook 模拟部分行为,如挂载后执行、更新后执行和卸载时清理,不过其执行时机与类组件略有差异。
- 【回答框架 5】理解生命周期顺序对避免内存泄漏、优化渲染性能、正确获取数据等至关重要,例如在 componentDidMount 中发起网络请求,在 componentWillUnmount 中取消请求。
- 【关键点 1】挂载阶段顺序:constructor -> getDerivedStateFromProps -> render -> componentDidMount。
- 【关键点 2】更新阶段顺序:getDerivedStateFromProps -> shouldComponentUpdate -> render -> getSnapshotBeforeUpdate -> componentDidUpdate。
- 【关键点 3】卸载阶段只执行 componentWillUnmount,用于清理资源。
- 【关键点 4】React 16.3 后不推荐使用 componentWillMount、componentWillReceiveProps、componentWillUpdate,应改用新的生命周期方法或 getDerivedStateFromProps。
- 【关键点 5】函数组件通过 useEffect 实现类组件生命周期的大部分功能,但执行时机不同。
- 【易错点 1】不要在 render 或 getDerivedStateFromProps 中执行副作用操作,否则可能导致死循环或性能问题。
- 【易错点 2】componentDidMount 中设置状态会触发额外一次渲染,需谨慎避免不必要的重新渲染。
- 【易错点 3】依赖旧的 unsafe 生命周期方法可能会在异步渲染时产生不安全的操作,导致状态不一致。