面试题答案
一键面试constructor
- 特点:
- 是 ES6 类的构造函数,在创建类实例时最先被调用。
- 通常用于初始化 state 和绑定事件处理函数。
- 此时组件尚未挂载,不能访问
this.props
和this.state
以外的任何 DOM 或 React 特定的 API。
- 适用场景:
- 初始化 state 数据,这些数据在组件整个生命周期基本保持不变或只在组件创建时设置一次。
- 绑定自定义方法到
this
,以便在组件的其他方法中使用this
正确指向组件实例。
- 可能存在的风险:
- 如果在 constructor 中执行复杂的计算逻辑,可能会影响组件的初始化性能,因为 constructor 执行时 React 还未开始渲染组件。
- 错误地访问
this.props
或this.state
以外的属性可能导致运行时错误。
getDerivedStateFromProps
- 特点:
- 是一个静态方法(
static
),在组件挂载和更新时都会被调用。 - 接收
props
和state
作为参数,返回一个对象来更新 state,或返回null
表示不更新 state。 - 不能直接访问
this
,只能通过传入的参数进行操作。
- 是一个静态方法(
- 适用场景:
- 当 state 的值在某种程度上依赖于 props 的变化时,例如根据传入的不同 props 来初始化或更新 state。
- 当需要在组件接收到新 props 时重置一些内部 state 时。
- 可能存在的风险:
- 由于每次 props 更新都会触发,可能会导致不必要的 state 更新,从而引发额外的渲染,影响性能。
- 因为是静态方法,无法访问实例方法和实例属性,逻辑处理相对受限。
componentWillMount
- 特点:
- 在组件即将挂载到 DOM 之前被调用。
- 可以访问
this.props
和this.state
,但此时组件还未插入到 DOM 中。 - 在 React v16.3 及以后版本已被标记为不安全的生命周期方法,逐步弃用。
- 适用场景:
- 在旧版本 React 中,可用于在组件挂载前发起数据请求,获取数据并初始化 state。
- 执行一些只需要在组件第一次渲染前执行一次的操作。
- 可能存在的风险:
- 因为在 React Fiber 架构下,
componentWillMount
可能会被多次调用(在异步渲染过程中),导致重复操作,如多次发起相同的数据请求,造成数据不一致或性能问题。 - 随着 React 版本更新,继续使用可能导致兼容性问题。
- 因为在 React Fiber 架构下,