React中的生命周期用法详解

 更新时间:2025年03月12日 09:28:16   作者:酒江  
这篇文章主要介绍了React中的生命周期用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

React中的生命周期

在 React 中,组件的生命周期是指从组件创建到销毁的整个过程。

React 的生命周期可以分为三大类:挂载(Mounting)、更新(Updating)、卸载(Unmounting)。

这些生命周期方法提供了在组件的不同阶段执行代码的机会。

1. 挂载阶段(Mounting)

当组件被创建并插入 DOM 时,会依次触发以下生命周期方法:

  • constructor(props)

构造函数,在组件实例化时调用。用于初始化组件的 state 或绑定事件处理函数。

constructor(props) {
  super(props);
  this.state = { count: 0 };
}
  • static getDerivedStateFromProps(nextProps, nextState)

在每次渲染之前调用,无论是初始化渲染还是后续更新。此方法返回一个对象来更新 state,或者返回 null 表示不更新 state。

static getDerivedStateFromProps(nextProps, nextState) {
  if (nextProps.value !== nextState.value) {
    return { derivedValue: nextProps.value };
  }
  return null;
}
  • render()

这个方法是必需的,它返回组件的 JSX 结构,用于渲染 UI。

  • componentDidMount()

在组件挂载后调用。通常用于进行网络请求或其他需要在 DOM 更新后执行的操作。

componentDidMount() {
  console.log("Component mounted");
}

2. 更新阶段(Updating)

当组件的 state 或 props 发生变化时,组件会进入更新阶段。更新阶段包括以下生命周期方法:

  • static getDerivedStateFromProps(nextProps, nextState)

更新阶段同样会调用此方法。它在每次接收到新的 props 时调用,返回一个对象来更新 state 或返回 null。

  • shouldComponentUpdate(nextProps, nextState)

在组件更新之前调用,返回 truefalse,用于优化性能,避免不必要的渲染。

shouldComponentUpdate(nextProps, nextState) {
  return nextState.count !== this.state.count;
}
  • render()

更新阶段与挂载阶段一样,render() 方法会被调用,返回新的 UI。

  • getSnapshotBeforeUpdate(prevProps, prevState)

在 React 更新 DOM 之前调用,返回一个值作为 componentDidUpdate 方法的第三个参数,通常用于获取一些 DOM 信息(如滚动位置)。

getSnapshotBeforeUpdate(prevProps, prevState) {
  return prevState.scrollPosition;
}
  • componentDidUpdate(prevProps, prevState, snapshot)

在组件更新后调用。可以通过比较前后 props 或 state,来执行额外的操作。

componentDidUpdate(prevProps, prevState, snapshot) {
  if (this.state.count !== prevState.count) {
    console.log("Count changed");
  }
}

3. 卸载阶段(Unmounting)

当组件从 DOM 中卸载时,会调用以下生命周期方法:

  • componentWillUnmount()

在组件卸载之前调用,用于清理定时器、取消网络请求或解绑事件监听等。

componentWillUnmount() {
  console.log("Component will unmount");
}

4. 错误处理阶段(Error Handling)(React 16+ 新增)

React 16 引入了错误边界机制,用于捕获渲染过程中的 JavaScript 错误,并渲染一个备用的 UI。

  • static getDerivedStateFromError(error)

捕获子组件的错误,并更新 state 以显示备用 UI。

static getDerivedStateFromError(error) {
  return { hasError: true };
}
  • componentDidCatch(error, info)

捕获并处理错误,通常用于日志记录或其他后续操作。

componentDidCatch(error, info) {
  logErrorToMyService(error, info);
}

总结

React 组件生命周期方法主要分为三个阶段:挂载(Mounting)、更新(Updating)、卸载(Unmounting),以及错误处理阶段。

它们提供了不同的时机让开发者在组件的生命周期内执行特定操作,比如初始化状态、更新 UI、执行副作用操作等。

常见生命周期方法:

阶段方法
挂载constructor, getDerivedStateFromProps, render, componentDidMount
更新getDerivedStateFromProps, shouldComponentUpdate, render, getSnapshotBeforeUpdate, componentDidUpdate
卸载componentWillUnmount
错误处理getDerivedStateFromError, componentDidCatch

随着 React 16.3 后引入的 Hooks,一些传统的类组件生命周期方法被替代或改进,但在类组件中,生命周期方法仍然是管理组件行为的核心。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • react render props模式实现组件复用示例

    react render props模式实现组件复用示例

    本文主要介绍了react render props模式实现组件复用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • React+Antd修改Table组件滚动条样式的操作代码

    React+Antd修改Table组件滚动条样式的操作代码

    这篇文章主要介绍了React+Antd修改Table组件滚动条样式的操作代码,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • react native 原生模块桥接的简单说明小结

    react native 原生模块桥接的简单说明小结

    这篇文章主要介绍了react native 原生模块桥接的简单说明小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • React router动态加载组件之适配器模式的应用详解

    React router动态加载组件之适配器模式的应用详解

    这篇文章主要介绍了React router动态加载组件之适配器模式的应用 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • React 使用Hooks简化受控组件的状态绑定

    React 使用Hooks简化受控组件的状态绑定

    这篇文章主要介绍了React 使用Hooks简化受控组件的状态绑定,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • React Fiber 链表操作及原理示例详解

    React Fiber 链表操作及原理示例详解

    这篇文章主要为大家介绍了React Fiber 链表操作原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • react-native只保留3x图原理解析

    react-native只保留3x图原理解析

    这篇文章主要为大家介绍了react-native只保留3x图原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 深入理解React中何时使用箭头函数

    深入理解React中何时使用箭头函数

    对于刚学前端的大家来说,对于React中的事件监听写法有所疑问很正常,特别是React中箭头函数使用这块,下面这篇文章主要给大家深入的讲解了关于React中何时使用箭头函数的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-08-08
  • 深入理解react-router 路由的实现原理

    深入理解react-router 路由的实现原理

    这篇文章主要介绍了深入理解react-router 路由的实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • React 实现表单组件的示例代码

    React 实现表单组件的示例代码

    本文主要介绍了React 实现表单组件的示例代码,支持包括输入状态管理,表单验证,错误信息展示,表单提交,动态表单元素等功能,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07

最新评论