react当中生命周期(旧生命周期详解)

新生命周期https://blog.csdn.net/kkkys_kkk/article/details/135156102?spm=1001.2014.3001.5501

目录

什么是生命周期

react中的生命周期

旧生命周期

生命周期图示

常用的生命周期钩子函数

初始化阶段

挂载阶段

在严格模式下挂载阶段的生命周期函数会执行两次原因

更新阶段

componentWillPrceiveProps

shouldComponentUpdate

componentWillUpdate

render(同上)

componentDidUpdate

销毁阶段

componentWillUnmount()


什么是生命周期

生命周期(Lifecycle)指的是软件或程序在运行过程中经历的不同阶段和状态变化。在编程领域中,特别是在面向对象编程中,生命周期是指对象从创建到销毁的整个过程中所经历的状态变化。

生命周期通常由一系列的方法或事件组成,用于在对象的不同阶段执行相应的操作或处理。每个阶段可以对应于不同的状态,例如初始化、运行、暂停、恢复以及销毁等。

在前端Web开发中,生命周期常常用于描述JavaScript框架或库中的组件或页面的状态变化。例如,在React框架中,组件有挂载、更新和卸载等不同的生命周期阶段,每个阶段都有相应的生命周期方法,如componentDidMount、componentDidUpdate和componentWillUnmount等。

通过生命周期方法,开发者可以在对象不同状态下执行相应的操作,比如初始化数据、处理用户输入、发送网络请求、更新UI等。这些方法允许开发者在适当的时候执行逻辑,并且处理应用程序的不同方面。

react中的生命周期

在React中,组件的生命周期指的是组件从创建、挂载、更新到销毁的整个过程中所经历的不同阶段和状态变化。通过控制这些生命周期方法的调用,可以在不同的阶段执行逻辑操作,如初始化数据、处理用户输入、发送网络请求、更新UI等。

React的组件生命周期可以分为以下三个阶段:

1. Mounting(挂载)阶段:组件被创建并添加到DOM中。
   - constructor:组件的构造函数,在组件被创建时调用,一般用于初始化状态和绑定事件。
   - render:渲染组件的UI结构。
   - componentDidMount:组件被挂载到DOM后调用,可以执行副作用操作,如发送网络请求、订阅事件等。

2. Updating(更新)阶段:组件的状态或属性发生变化时重新渲染。
   - componentDidUpdate:组件更新后调用,可以进行一些更新后的操作,比如处理更新后的数据、重新渲染等。

3. Unmounting(卸载)阶段:组件从DOM中移除。
   - componentWillUnmount:组件即将被卸载和销毁时调用,可以执行一些清理操作,比如取消订阅、清除定时器等。

在React 16.3版本之后,还引入了新的生命周期方法,包括:
- static getDerivedStateFromProps: 在组件实例化或接收到新的props时调用,返回一个新的state,用于在props发生变化时更新state。
- getSnapshotBeforeUpdate: 在更新前获取DOM的快照,用于在DOM更新后获取一些额外的信息。

需要注意的是,在React 17版本中,一些生命周期方法已经被标记为过时,建议使用其他替代的方法来完成相应的操作。而且,React Hooks的引入也改变了组件的开发方式,提供了更简洁的方式操作组件的状态和生命周期。

旧生命周期

生命周期图示

常用的生命周期钩子函数
  • 初始化阶段

constructor:创建组件时最先执行;

通过给 this.state 赋值对象来初始化内部的state;为事件处理程序绑定this

如果不初始化 state 或不进行方法绑定,则不需要为 React 组件实现构造函数

  • 挂载阶段

挂载阶段会触发 componentWillMount、 render 和 componentDidMount

componentWillMount数据可以获取到,但是真实DOM没有获取到,它相当于是Vue生命周期中 created + beforeMount

render:每次组件渲染都会触发,渲染视图(注意,不能调用setState())

componentDidMount:组件挂载(完成DOM渲染)后,用于发送网络请求;DOM操作

在严格模式下挂载阶段的生命周期函数会执行两次原因
官网的解释是: React 工作分为两个阶段,渲染和提交阶段。渲染的过程可能会很慢,提交会很快。为了避免浏览器的阻塞,React 会把渲染工作分解为多个部分执行。这就导致了React 在提交之前会多次调用渲染阶段生命周期的方法,或者在不提交的情况下调用它们。为的就是消除副作用。但在生产环境下不会产生此问题
  • 更新阶段

props更新

  • componentWillPrceiveProps

接收新属性;能够监听到当前组件身上的 props 变化 nextProps参数可以获取到最新的属性

  • shouldComponentUpdate

触发时机:组件重新渲染前执行

根据 shoundComponentUpdate 的返回值来决定是否更新自身组件及其子组件。返回 true
新,返回 false 不更新
此方法仅作为性能优化的方案 而存在,不要企图依靠此方法来 阻止 渲染
最好使用 React 提供的内置组件 PureComponent 来自动判断是否调用 render 方法,而不是使用 shoundComponentUpdate 方法进行手动判断
不建议在 shouldComponentUpdate() 中进行深层比较或使用 JSON.stringify() ,这样做会影响性能
shoundComponentUpdate( nextProps , nextState )接收两个值
        nextProps:更新完成后的 props
        nextState:更新完成后的 state
  • componentWillUpdate

组件即将更新

作用: 获取的是更新前的数据,为组件的更新做准备工作,生成新的VDOM

注意:这个钩子函数中切记不要使用 this.setState,会造成死循环

  • render(同上)
  • componentDidUpdate
在组件更新(完成 DOM渲染)后触发
1. 发送网络请求; 2. DOM 操 作;
注意:如果要 setState() 必须放 在一个if 条件中
state更新
(同上)
  • shouldComponentUpdate

  • componentWillUpdate
  • render
  • componentDidUpdate
销毁阶段
componentWillUnmount()

作用: 在组件被卸载并销毁之前立即被调用。在此方法中执行任何必要的清理,例如使定时器无效,取消网络请求或清理在componentDidMount中创建的任何监听。主要是为了善后工作,比如关闭定时器,删除定义的对象

组件卸载方式: 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

W25Q128

什么是 W25Q128 ? W25Q128是一款由Winbond(威邦电子)公司生产的闪存存储器芯片,属于串行闪存系列。具体来说,W25Q128是一颗128Mb(兆位)容量的串行闪存芯片,其中"W"代表Wi…

Python匹配文件模块的实战技巧

更多资料获取 📚 个人网站:ipengtao.com 在Python中,文件匹配是许多应用中常见的需求,例如文件管理、数据处理等。本文将深入探讨Python中用于文件匹配的模块,包括glob、fnmatch和os.path等,通过丰富的示例…

第11章 GUI Page403~405 步骤三 设置滚动范围

运行效果: 源代码: /**************************************************************** Name: wxMyPainterApp.h* Purpose: Defines Application Class* Author: yanzhenxi (3065598272qq.com)* Created: 2023-12-21* Copyright: yanzhen…

C# 跨越配置

跨越配置1 项目框架 .NET Framework 1.web.config配置 在system.webServer节点中添httpProtocol子节点 Access-Control-Allow-Origin值为“*”” <httpProtocol><customHeaders><add name"Access-Control-Allow-Origin" value"*" /><…

基于DeepSpeed对 llama2-7b的LORA精调

DeepSpeed数据并行研究 1. 技术调研 a. DeepSpeed DeepSpeed是一个开源深度学习训练优化库&#xff0c;其中包含一个新的显存优化技术—— ZeRO&#xff08;零冗余优化器&#xff09;。该框架包含四个技术亮点&#xff1a; 用 3D 并行化实现万亿参数模型训练&#xff1a; D…

【算法】使用二分查找解决算法问题:理解二分法思想,模板讲解与例题实践

文章目录 二分算法思想 / 性质 / 朴素模板二分查找的引入&#xff08;二段性&#xff09;704.二分查找 模板34.在排序数组中查找元素的第一个和最后一个位置 二分查找的前提条件 / 时间复杂度分析 算法题69.x的平方根35.搜索插入位置852.山脉数组的峰顶索引162.寻找峰值153.寻找…

服务熔断(Hystrix)

服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B和微服务C又调用其他的微服务&#xff0c;这就是所谓的“扇出”&#xff0c;如果扇出的链路上某个微服务的调用响应时间过长&#xff0c;或者不可用&#xff0c;对微服务A的…

《每天一分钟学习C语言·六》

1、 1字节&#xff08;Byte&#xff09;8位&#xff0c;1KB1024字节&#xff0c;1M1024KB&#xff0c;1G1024MB 2、 char ch A; printf(“ch %d\n”, ch);ch为65 这里是ASCII码转换 3、 scanf("%d", &i); //一般scanf直接加输入控制符 scanf("m%d&qu…

TKEStack容器管理平台实战之部署wordpress应用

TKEStack容器管理平台实战之部署wordpress应用 一、TKEStack介绍1.1 TKEStack简介1.2 TKEStack特点1.3 TKEStack架构图 二、kubernetes集群介绍2.1 k8s简介2.2 k8s架构图 三、本次实践介绍3.1 实践环境要求3.2 本次实践环境规划3.3 本次实践简介 四、安装容器管理平台4.1 安装T…

WinRAR如何设置和清除密码?

WinRAR是一款功能强大的压缩管理器&#xff0c;除了能把文件打包变小&#xff0c;还能给压缩包设置密码保护&#xff0c;让文件不能随意打开&#xff0c;不需要时还可以把密码取消。下面来说说具体怎么操作吧。 WinRAR根据需要可以设置单次密码和永久密码&#xff0c;我们分别…

C++ Qt开发:Charts绘图组件概述

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QCharts二维绘图组件的常用方法及灵活运用。 …

Git 配置多个 SSH-Key

Git 配置多个 SSH-Key &#xff08;两个都是gitee&#xff09; 先看图&#xff0c;官网固然重要&#xff0c;但是不完全行&#xff08;因为官网示例是一个gitee一个github&#xff09;&#xff0c;现在想是想多个都是gitee在他上面稍微更改即可 一般不对遇到这种问题&#xf…

Windows电脑向ipad和iOS系统共享文件夹

Windows电脑向ipad和iOS系统共享文件夹 这个方案不需要下载任何软件&#xff0c;但是要求 iOS 和 Windows 在同一个局域网内。再大的文件都可以在 iOS13 自带的的“文件App”里实时显示&#xff0c;可以直接打开。这个解决方案需要你 Windows 电脑上登陆了微软账号&#xff0c…

数字技术:引领未来的创新驱动力

数字技术&#xff0c;作为当代最具创新性和影响力的技术领域之一&#xff0c;已经在全球范围内引起了广泛的关注和研究。当前&#xff0c;数字技术正以惊人的速度改变着我们的世界&#xff0c;从日常生活到商业领域&#xff0c;无一不受到其影响。数字技术的发展不仅改变了人们…

深度学习美化图片,绝对可行,美化效果挺好 DPED

一、背景 要美化生成的图片的效果&#xff0c;找到一个 效果如下&#xff1a; 二、步骤 1、python3.6环境&#xff0c;TensorFlow 2.0.0 2、下载代码&#xff1a;https://github.com/aiff22/DPEDx 3、将要增强的照片放在以下目录中&#xff0c;没有就新建&#xff1a; dpe…

基于改进YOLOv7的绝缘子缺陷检测算法

摘要 现有的检测方法面临着巨大的挑战&#xff0c;在识别绝缘子的微小缺陷时&#xff0c;针对输电线路图像与复杂的背景。为保证输电线路的安全运行&#xff0c;提出一种改进的YOLOv 7模型&#xff0c;以提高检测结果。 首先&#xff0c;基于K-means对绝缘子数据集的目标盒进…

Python并行编程详解:发挥多核优势的艺术

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在当今计算机时代&#xff0c;充分发挥多核处理器的性能是提高程序运行效率的关键。Python作为一门强大的编程语言&#xff0c;提供了多种并行编程工具和库。本文将深入介绍Python中的并行编程&#xff0c;探讨如…

Python命名规范中的[单/双][前导/后缀]下划线小结

如图所示 出处 Single and Double Underscores in Python Names

泽攸科技SEM台式扫描电子显微镜

泽攸科技是一家国产的科学仪器公司&#xff0c;专注于研发、生产和销售原位电镜解决方案、扫描电镜整机、台阶仪、探针台等仪器。目前台式扫描电镜分为三个系列&#xff1a;ZEM15、ZEM18、ZEM20。 ZEM15台式扫描电镜&#xff1a; ZEM18台式扫描电镜&#xff1a; ZEM20台式扫描…