React生命周期(新-旧)

news2025/1/21 15:34:56

文章目录

  • 前言
    • 1、生命周期介绍
    • 2、钩子函数介绍
  • 生命周期的三个阶段
  • 一、生命周期(旧)
    • 1.初始化阶段(挂载阶段)
        • ① constructor
        • ② componentWillMount
        • ③ render
        • ④ componentDidMount
    • 2.更新阶段
        • ① shouldComponentUpdate
        • ② componentWillUpdate
        • ③ render
        • ④ componentDidUpdate
    • 3.卸载阶段
        • ① componentWillUnmount
  • 二、生命周期(新)
    • 1.初始化阶段(挂载阶段)
        • ① constructor
        • ② getDerivedStateFromProps
        • ③ render
        • ④ componentDidMount
    • 2.更新阶段
        • ① getDerivedStateFromProps
        • ② shouldComponentUpdate
        • ③ render
        • ④ getSnapshotBeforeUpdate
        • ⑤ componentDidUpdate
    • 3.卸载阶段
        • ① componentWillUnmount
  • 三、生命周期新旧整体图片
  • 四、三个被遗弃的生命周期函数
      • 1、UNSAFE_componentWillMount()
      • 2、UNSAFE_componentWillReceiveProps()
      • 3、UNSAFE_componentWillMount()
  • 五、新增的两个生命周期函数
      • 1、getDerivedStateFromProps
      • 2、getSnapshotBeforeUpdate

前言

1、生命周期介绍

① 是什么?

组件从创建到挂载页面上运行,再到组件不用时卸载的过程,叫生命周期,只有类组件才有生命周期

②作用

学习组件的生命周期,有助于理解组件的运行方式,完成更复杂的组件更能、分析组件错误原因等。

2、钩子函数介绍

① 是什么?

生命周期的每个阶段总是伴随着一些方法调用,这些方法就是生命周期的钩子函数。

②作用

为开发人员在不同阶段操作组件提供了时机。

生命周期的三个阶段

三阶段分为:创建时、更新时和卸载时。
👉点击此(生命周期结构图)

一、生命周期(旧)

生命周期(旧)

1.初始化阶段(挂载阶段)

① constructor

Ⅰ、执行

组件实例被创建并初始化时触发

Ⅱ、能做什么

  • 通过给 this.state 赋值对象来初始化内部 state。
  • 为事件处理函数绑定实例

② componentWillMount

Ⅰ、执行

componentWillMount() 在挂载之前被调用。

Ⅱ、能做什么

用于准备渲染前的工作

③ render

Ⅰ、执行

根据组件的props和state

Ⅱ、能做什么

渲染UI,返回需要渲染的元素结构

④ componentDidMount

Ⅰ、执行

componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。依赖于 DOM 节点的初始化应该放在这里

Ⅱ、能做什么

这个方法是比较适合添加订阅的地方。如果添加了订阅,请不要忘记在 componentWillUnmount() 里取消订阅

2.更新阶段

① shouldComponentUpdate

Ⅰ、执行

当 props 或 state 发生变化时,shouldComponentUpdate() 会在渲染执行之前被调用。

Ⅱ、能做什么

根据shouldComponentUpdate的返回值,判断组件的输出是否受但钱state或peops更改影响。默认行为是state每次发生变化组件都会重新渲染。大部分情况下,应该遵循默认行为。

② componentWillUpdate

Ⅰ、执行

组件即将被重新渲染前触发

Ⅱ、能做什么

用于准备更新前的工作

③ render

Ⅰ、执行

根据组件的props和state

Ⅱ、能做什么

渲染UI,返回需要渲染的元素结构

④ componentDidUpdate

Ⅰ、执行

componentDidUpdate() 会在更新后会被立即调用。首次渲染不会执行此方法。

Ⅱ、能做什么

当组件更新后,可以在此处对 DOM 进行操作。如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求。

3.卸载阶段

① componentWillUnmount

Ⅰ、执行

componentWillUnmount() 会在组件卸载及销毁之前直接调用。

Ⅱ、能做什么

在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等。

总结图

二、生命周期(新)

生命周期(新)

1.初始化阶段(挂载阶段)

① constructor

Ⅰ、执行

组件实例被创建并初始化时触发

Ⅱ、能做什么

  • 通过给 this.state 赋值对象来初始化内部 state。
  • 为事件处理函数绑定实例

② getDerivedStateFromProps

Ⅰ、执行

getDerivedStateFromProps 会在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。

Ⅱ、能做什么

它应返回一个对象来更新 state,如果返回 null 则不更新任何内容。

③ render

Ⅰ、执行

根据组件的props和state

Ⅱ、能做什么

渲染UI,返回需要渲染的元素结构

④ componentDidMount

Ⅰ、执行

componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用。依赖于 DOM 节点的初始化应该放在这里

Ⅱ、能做什么

这个方法是比较适合添加订阅的地方。如果添加了订阅,请不要忘记在 componentWillUnmount() 里取消订阅

2.更新阶段

① getDerivedStateFromProps

Ⅰ、执行

getDerivedStateFromProps 会在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。

Ⅱ、能做什么

它应返回一个对象来更新 state,如果返回 null 则不更新任何内容。

② shouldComponentUpdate

Ⅰ、执行

当 props 或 state 发生变化时,shouldComponentUpdate() 会在渲染执行之前被调用。

Ⅱ、能做什么

根据shouldComponentUpdate的返回值,判断组件的输出是否受但钱state或peops更改影响。默认行为是state每次发生变化组件都会重新渲染。大部分情况下,应该遵循默认行为。

③ render

Ⅰ、执行

根据组件的props和state

Ⅱ、能做什么

渲染UI,返回需要渲染的元素结构

④ getSnapshotBeforeUpdate

Ⅰ、执行

getSnapshotBeforeUpdate() 在最近一次渲染输出(提交到 DOM 节点)之前调用。

Ⅱ、能做什么

它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置)。此生命周期方法的任何返回值将作为参数传递给 componentDidUpdate()。

⑤ componentDidUpdate

Ⅰ、执行

componentDidUpdate() 会在更新后会被立即调用。首次渲染不会执行此方法。

Ⅱ、能做什么

当组件更新后,可以在此处对 DOM 进行操作。如果你对更新前后的 props 进行了比较,也可以选择在此处进行网络请求。

3.卸载阶段

① componentWillUnmount

Ⅰ、执行

componentWillUnmount() 会在组件卸载及销毁之前直接调用。

Ⅱ、能做什么

在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等。

总结图

三、生命周期新旧整体图片

生命周期

四、三个被遗弃的生命周期函数

以下生命周期方法标记为“过时”。这些方法任然有效,但不建议在新代码中使用它们。使用这被遗弃的生命周期需要在前面加上UNSAFE_,但是不加也没事(建议加上)。

1、UNSAFE_componentWillMount()

Ⅰ、执行

UNSAFE_componentWillMount() 是 React 组件生命周期中的一个方法,用于在组件挂载(即被渲染到 DOM 中)之前调用。

Ⅱ、能做什么

在组件更新之前执行一些操作。它接收两个参数:nextProps和nextState,分别表示组件即将更新的props和state。

2、UNSAFE_componentWillReceiveProps()

Ⅰ、执行

用于在组件接收新的props时触发。

Ⅱ、能做什么

允许组件根据即将接收到的新props进行一些操作,例如更新组件的状态或执行一些副作用操作。在这个方法中,可以比较当前props和即将接收到的props的差异,并根据需要进行相应的处理。

3、UNSAFE_componentWillMount()

Ⅰ、执行

当组件的props或state发生变化,并且在重新渲染之前,UNSAFE_componentWillUpdate()方法会被调用。

Ⅱ、能做什么

UNSAFE_componentWillUpdate()的作用是在组件更新之前执行一些操作。它接收两个参数:nextProps和nextState,分别表示组件即将更新的props和state。

五、新增的两个生命周期函数

1、getDerivedStateFromProps

执行:

static getDerivedStateFromProps(props, state)
在组件创建时和更新时的render方法之前调用。

作用:

它应该返回一个对象来更新状态,或者返回null来不更新任何内容。

2、getSnapshotBeforeUpdate

执行:

getSnapshotBeforeUpdate()
被调用于render之后,可以读取但无法使用DOM的时候。

作用:

它使您的组件可以在可能更改之前从DOM捕获一些信息(例如滚动位置)。此生命周期返回的任何值都将作为参数传递给componentDidUpdate()。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/925227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring之Spring性能优化与监控

Spring性能优化与监控 Spring性能优化与监控 摘要引言词汇解释详细介绍什么是缓存?Spring框架中的缓存支持示例代码:注释: 注意事项 通过合理使用缓存,可以显著提升应用程序的响应速度,降低系统负载,提供更…

港联证券|市场生态全面优化 创新成长愈加鲜明

8月24日,创业板变革并试点注册制已高质量运行满三周年。坚持变革定力、坚守板块定位——行至2023年,变革后的创业板商场板块功用日益完备、立异生长特征愈加显着,一批又一批战略性新兴工业和高新技能企业继续出现,先进制作、数字经…

IO线程,文件IO(open),文件(stat)与目录(opendir)属性的读取

一、文件IO 1、文件io通过系统调用来操作文件 系统调用:系统提供给用户的一组API(接口函数) open/read/write/close/lseek... 用户空间进程访问内核的接口 把用户从底层的硬件编程中解放出来 极大的提高了系统的安全性 使用户程序具有可移植性(同一系统下) 是操作系统的一部分…

400电话系统如何进行数据分析和优化?

400电话系统可以通过以下方式进行数据分析和优化: 呼叫记录:400电话系统会记录每一次呼叫的相关信息,包括呼叫时间、呼叫持续时间、呼叫地点等。通过分析呼叫记录,企业可以了解客户的呼叫习惯和行为模式,如高峰时段、呼…

如何自己实现一个丝滑的流程图绘制工具(二) 自定义面板

前言 我需要的自定义面板不是固定在左侧,而是右上角,且只有新增节点的操作。采用css取定位更改。 如何自定义面板内容呢? paltte目录下的两个文件 CustomPalette.js export default class CustomPalette {constructor(bpmnFactory, creat…

开源项目-会议室预约管理系统

哈喽,大家好,今天给大家带来一个开源项目-会议室管理系统。项目基于SpringBoot+VUE开发。 会议室管理系统主要分为 前台会议室预约管理系统 和 会议室后台管理系统 两部分 前台会议室预约管理系统主要有申请会议室,预约进程,查看历史会议三部分 后台管理系统主要有会议室…

【Mybatis源码分析】Mybatis 是如何实现预编译的?

Mybatis 是如何实现预编译的? 一、前言二、源码分析三、总结 一、前言 在介绍 Mybatis 是如何实现预编译之前,需提前知道俩个预备知识: MySQL的运行流程(对应的 SQL 会成为一个文本-》查询缓存(8.0后没了&#xff09…

车联网技术介绍

上图是目前车联网架构图,基于“云-管-端”的车联网系统架构以支持车联网应用的实现, “云”是指 V2X 基础平台、高基于精度定位平台等基础能力,可实现车辆动态厘米级定位,这将满足现阶段以及未来车联网应用场景的定位精度需求。 “…

【Linux网络】Cookie和session的关系

目录 一、Cookie 和 session 共同之处 二、Cookie 和 session 区别 2.1、cookie 2.2、session 三、cookie的工作原理 四、session的工作原理 一、Cookie 和 session 共同之处 Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式。 二、Cookie 和 session 区别 2.…

【C语言】基础知识杂记(整理自用)

前言 之前一直在学新知识,最近打算复习一下之前学的,所以写了这篇文章,记录一下不熟练的知识点,自用,对大家帮助可能不是很大。 double类型与float类型 编译器默认7.0为double类型 在数据后加一个f,编译…

Springboot+mybatis-plus+dynamic-datasource+Druid 多数据源 分布式事务

Springbootmybatis-plusdynamic-datasourceDruid 多数据源事务,分布式事务 文章目录 Springbootmybatis-plusdynamic-datasourceDruid 多数据源事务,分布式事务0.前言1. 基础介绍ConnectionFactoryAbstractRoutingDataSource 动态路由数据源的抽象类 Dyn…

mac地址、ip地址、子网掩码、端口

1. mac地址 又称为网络适配器或者网络接口卡NIC,但是现在更多人原因使用更简单的名称"网卡",通过网卡能够是不同的计算机之间相互连接,从而完成数据通信的功能 每一个网卡在出厂的时候 都会给分配到一个编号,类似与身份…

信创测试:创意与创新的评估之路

在当今竞争激烈的商业环境中,创意和创新成为企业脱颖而出的关键。为了有效评估和提升创意与创新的水平,信创测试被引入作为一个重要的工具。本文将介绍信创测试的概念、意义以及应用,探讨它在推动企业创新发展中的重要作用。 一、什么是信创测…

DOS常见命令

DOS常见命令 DOS是什么如何打开DOScmd常见的命令集合 DOS是什么 DOC命令是我们浏览器中的终端 ,但不同的是我们打开软件的方式 使用的是点击文件图标,点击图标的同时 我们也相当于使用一个命令 只是我们看不见而已 在电脑上操作的时候 通常都是使用命令…

Docker微服务实战

文章目录 业务需求IDEA编写代码编写Dockerfile构建镜像运行容器网页端访问测试 业务需求 利用Docker部署应用服务,实现在网页端通过输入地址 ip:端口/hello/docker,页面显示hello docker ! IDEA编写代码 创建springboot项目 网上很多教程,此步骤省略……

Mybatis动态之灵活使用下

目录 ​编辑 前言: 1.mybatis的分页 1.1分页的应用场景 1.2分页的使用方式 2.mybatis中特殊字符处理 2.1mybatis中特殊字符介绍 2.2mybatis中特殊字符的使用方式 前言: 上篇我已经写了Mybatis动态之灵活使用,接着上篇写mybatis的分页…

QT6串口模块QSerialport的安装,主要是“编译器”版本问题

参考文档 https://blog.csdn.net/lidandan2016/article/details/85929069 https://blog.csdn.net/qq_42968012/article/details/126020554 https://blog.csdn.net/weixin_48467622/article/details/119982667 整体测试解决步骤总结 首先,QT6都不能进行离线安装&a…

Cocos独立游戏开发框架中的计时器管理器

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。在独立游戏开发中,计时器是一个至关重要的组件,用于管理时间相关的操作,如动画效果、技能冷却、任务进度等。然而,随着游戏变得…

【王道-绪论-计算机系统概述】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 操作系统的概念功能和定义一、操作系统的概念和定义二、操作系统的功能和目标1、资源的管理者2、向用户提供服务2.1图形化用户接口2.2联机命令接口2.3脱机命令接口2.4程序接口 3、对硬件机器的拓展 三、总结 No.2 操作系…

QT6新建工程方式导致pro文件和无pro文件,

QT6创建工程文件的不同 cmake创建的无.pro工程 qmake创建的有.pro文件的工程