React生命周期(新-旧)

文章目录

  • 前言
    • 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.rhkb.cn/news/105479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科技资讯|苹果Vision Pro新专利曝光:可调节液态透镜

苹果公司近日申请了名为“带液态镜头的电子设备”,概述了未来可能的头显设计。头显设备中的透镜采用可调节的液态透镜,每个透镜可以具有填充有液体的透镜腔,透镜室可以具有形成光学透镜表面的刚性和 / 或柔性壁。 包括苹果自家的 Vision Pr…

【校招VIP】专业课考点之死锁检测与恢复

考点介绍: 根据不少同学的面试反馈,最近阿里和字节跳动面试时面试官都问到了死锁问题。如字节跳动考察的问题是:什么是线程死锁?死锁如何产生?死锁如何检测与恢复?其产生的原理与对应的解决方案都是重点考察…

Mybatis的动态SQL分页及特殊字符的使用

目录 一、分页 ( 1 ) 应用场景 ( 2 ) 使用 二、特殊字符 2.1 介绍 2.2 使用 给我们带来的收获 一、分页 分页技术的出现是为了解决大数据量展示、页面加载速度、页面长度控制和用户体验等问题。通过将数据分成多个页面,用户可以根据需求选择查看不同页的数据…

ITIL4的知识体系及必要性

官方网站 www.itilzj.com 文档资料: wenku.itilzj.com 点击进入IT管理资料库 ITIL4 的必要性及历史 在这个前所未有的变革时代,人们身处着被誉为“第四次工业革命”的时代,这个时代催生出了一个日益加速、变得愈发错综复杂的环境。在这种环境下&#xf…

STM32F4X 定时器中断

STM32F4X 定时器中断 什么是定时器STM32F4X 定时器分类有关定时器的概念预分频(PSC)自动重装载值(ARR) STM32F4X定时器例程定时器相关函数定时器例程 什么是定时器 定时器(Timer)最基本的功能就是定时,比如定时翻转LED灯,定时向串口发送数据等。除此之外…

Leetcode.73矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean[] row new boolean[m];boolean[] col…

亿赛通电子文档安全管理系统 RCE漏洞复现(QVD-2023-19262)

0x01 产品简介 亿赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产&…

基于JSP+Servlet+mysql员工权限管理系统

基于JSPServletmysql员工权限管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于JSPServlet的员工权限管理系统[qxxt] 项目架构:B/S架构 开发语言:Java语言 …

Linux上实现分片压缩及解压分片zip压缩包 - 及zip、unzip命令详解

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

JDK 核心jar之 rt.jar

一、JDK目录展示 二、rt.jar 简介 2.1.JAR释义 在软件领域,JAR文件(Java归档,英语:Java Archive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等&…

SRE 与开发的自动化协同 -- 生产环境出现 bug 自动生成异常追踪

简介 生产环境 bug 的定义:RUM 应用和 APM 应用的 error_stack 信息被捕捉后成为 bug。 以 APM 新增错误巡检为例,当出现新错误时,在观测云控制台的「事件」模块下生成新的事件报告,捕捉为 bug。同时利用 Dataflux Func 创建异常…

C 实现Window/DOS 键盘监听事件

今天是重新复习C语言实现的第一天,今天想编写C 对Windwos/Dos 键盘事件的学习。但是我在安装Visual Studio 2022 没有安装MFC 框架,今天记录下VS追加 MFC框架。 Visual Studio 2022 追加MFC 1、打开vs,点击创建新项目,右侧滑动框…

GB28181设备接入侧如何对接外部编码后音视频数据并实现预览播放

技术背景 我们在对接GB28181设备接入模块的时候,遇到这样的技术诉求,好多开发者期望能提供编码后(H.264/H.265、AAC/PCMA)数据对接,确保外部采集设备,比如无人机类似回调过来的数据,直接通过模…

使用StreamLold写入 Starrocks报错:Caused by org

问题描述 使用StreamLoad写入Starrocks报错&#xff0c;报这个错误:Caused by: org.apache.http.ProtocolException: Content-Length header already present 代码案例 引入依赖 <!-- Starrocks使用StreamLoad发送Http请求 --><dependency><groupId>or…

c++使用zlib对字符串进行压缩和解压

官网下载zlib库编译后就能使用 #include <string> #include <iostream> #include <memory> #include <assert.h> #include <cstring> #include "zlib.h"#define CHUNK 16384/* Compress from file source to file dest until EOF on …

vsCode使用cuda

一、vsCode使用cuda 前情提要&#xff1a;配置好mingw&#xff1a; 1.安装cuda 参考&#xff1a; **CUDA Toolkit安装教程&#xff08;Windows&#xff09;&#xff1a;**https://blog.csdn.net/qq_42951560/article/details/116131410 2.在vscode中添加includePath c_cp…

ViT模型架构和CNN区别

目录 Vision Transformer如何工作 ViT模型架构 ViT工作原理解析 步骤1&#xff1a;将图片转换成patches序列 步骤2&#xff1a;将patches铺平 步骤3&#xff1a;添加Position embedding 步骤4&#xff1a;添加class token 步骤5&#xff1a;输入Transformer Encoder 步…

electron软件安装时,默认选择为全部用户安装

后续可能会用electron开发一些工具&#xff0c;包括不限于快速生成个人小程序、开发辅助学习的交互式软件、帮助运维同学一键部署的简易版CICD工具等等。 开发进度&#xff0c;取决于我懒惰的程度。 不过不嫌弃的同学还是可以先关注一波小程序&#xff0c;真的发布工具了&…

【PHP】函数-作用域可变函数匿名函数闭包常用系统函数

文章目录 函数定义&使用命名规则参数种类默认值引用传递函数返回值return关键字 作用域global关键字静态变量 可变函数匿名函数闭包常用系统函数输出函数时间函数数学函数与函数相关函数 函数 函数&#xff1a;function&#xff0c;是一种语法结构&#xff0c;将实现某一个…

Java快速入门体验

Java快速入门体验 一、环境信息1.1 硬件信息1.2 软件信息 二、Maven安装2.1 Maven介绍2.2 Maven安装包下载2.3 Maven安装2.4 Maven初始化 三、Java安装3.1 JDK下载3.2 JDK安装3.3 JDK初始化 四、开发环境搭建4.1 安装开发工具4.2 关联Maven环境4.2.1 新建JAVA项目4.2.2 Maven与…