【React】生命周期

React 16之前的生命周期分为三个阶段:挂载阶段(Mounting)、更新阶段(Updating)、卸载阶段(Unmounting)。而React 16及以后版本,引入了新的生命周期方法,同时也引入了钩子函数(Hooks),让函数式组件也能具有类组件的生命周期特性,因此react 的生命周期逐渐淡化。

1. 挂载阶段(Mounting)

在组件实例第一次被创建并插入到DOM中时触发。

  • constructor(): 组件的构造函数,在组件被创建时调用。通常用于初始化state和绑定事件处理函数。在构造函数中,需要通过super(props)调用父类的构造函数。

  • static getDerivedStateFromProps(props, state): 这是一个静态方法,用于在props发生变化时更新state。它接收props和state作为参数,并返回一个对象来更新state,或者返回null不更新state。该方法在组件实例化时和每次接收新的props时都会被调用,不管是初次挂载还是后续更新。

  • render(): 这是生命周期中唯一必须要实现的方法。它负责返回要渲染的React元素。render方法应该是一个纯函数,不应该有副作用,也不应该改变组件的状态。

  • componentDidMount(): 在组件被挂载到DOM后立即调用。常用于执行一些需要DOM节点的操作,比如网络请求、订阅事件等。

2. 更新阶段(Updating)

当组件的props或state发生变化时触发。

  • static getDerivedStateFromProps(props, state): 见上述说明。

  • shouldComponentUpdate(nextProps, nextState): 在组件接收到新的props或state时调用,用于决定是否重新渲染组件。默认返回true,表示应该重新渲染。可以在此方法中进行性能优化,比如对props或state的变化进行判断,如果不需要重新渲染则返回false。

  • **render():**见上述说明。

  • getSnapshotBeforeUpdate(prevProps, prevState): 在render方法之后、组件更新到DOM之前调用。它可以读取之前DOM的状态,并返回一个值作为参数传递给componentDidUpdate方法。

  • componentDidUpdate(prevProps, prevState, snapshot): 组件更新后调用。可以在此方法中进行DOM操作,或者对更新前后的props和state进行比较操作。

3. 卸载阶段(Unmounting)

当组件从DOM中移除时触发。

  • componentWillUnmount(): 在组件即将被卸载和销毁时调用。常用于执行一些清理操作,比如取消订阅、清除定时器等。

React 16之后的生命周期

除了上述生命周期方法外,React 16及以后版本引入了一些新的生命周期方法:

  • static getDerivedStateFromError(error): 当子组件发生错误时调用,用于捕获错误并更新state以渲染备用UI。

  • componentDidCatch(error, info): 在组件的子组件发生错误后调用,用于捕获错误信息,并记录错误。可以在此方法中执行错误处理逻辑,比如发送错误报告等。

钩子函数(Hooks)

React 16.8及以后版本引入了Hooks,它使函数式组件也能具有类组件的生命周期特性。常用的Hooks包括:

  • useState(): 用于在函数式组件中添加state。

  • useEffect(): 在组件渲染后执行副作用操作,类似于componentDidMount和componentDidUpdate的组合。

  • useContext(): 用于在函数式组件中获取上下文对象。

  • useReducer(): 类似于Redux的reducer,用于复杂的state逻辑。

  • useCallback()和useMemo(): 用于性能优化,避免在每次渲染时重新创建函数或计算。

相关推荐

  1. React 生命周期详解

    2024-04-25 19:32:04       53 阅读
  2. React生命周期

    2024-04-25 19:32:04       31 阅读
  3. React生命周期

    2024-04-25 19:32:04       28 阅读
  4. Reactreact生命周期

    2024-04-25 19:32:04       39 阅读
  5. React 组件生命周期

    2024-04-25 19:32:04       40 阅读
  6. React生命周期总结

    2024-04-25 19:32:04       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 19:32:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 19:32:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 19:32:04       82 阅读
  4. Python语言-面向对象

    2024-04-25 19:32:04       91 阅读

热门阅读

  1. 【vue】axios封装拦截

    2024-04-25 19:32:04       27 阅读
  2. Electron vue 进程间消息通行

    2024-04-25 19:32:04       34 阅读
  3. LeetCode-数组中最长的方波

    2024-04-25 19:32:04       35 阅读
  4. history命令

    2024-04-25 19:32:04       32 阅读
  5. 为什么你的项目总延期?多半是没做好5件事

    2024-04-25 19:32:04       30 阅读
  6. 数据结构-分治策略(分治算法)

    2024-04-25 19:32:04       32 阅读
  7. 逆序对 题解 归并排序

    2024-04-25 19:32:04       22 阅读
  8. Android ContentProvider

    2024-04-25 19:32:04       30 阅读
  9. Kotlin语法入门-密封类和密封接口(11)

    2024-04-25 19:32:04       32 阅读