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中创建的任何监听。主要是为了善后工作,比如关闭定时器,删除定义的对象

组件卸载方式: 

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

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

相关文章

软件渗透测试有哪些测试流程?权威安全测试报告的重要性

软件渗透测试也是安全测试的一种,是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。作为网络安全防范的一种新技术,对于网络安全组织具有实际应用价值。 一、软件渗透测试的过程   软件渗透测试的过程通常包括四个主…

前端学习——vuex的入门

学习一门技术最快捷的方式就是先了解其概念和使用场景,毕竟任何技术的出现都是为了解决某一个场景下的通用解决方案,并且使用最合理的方式去解决问题。 那么什么是vuex? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中…

基于ssm+jsp学生综合测评管理系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把学生综合测评管理与现在网络相结合,利用java技术建设学生综合测评管理系统,实现学生综合测评的信息化。则对于进一步提高学生综合测评管理发展,丰富学生综合测评管理经验能起到不少的促进作用。…

OPC UA 与PROFINET比较

ROFINET和OPC UA是两种常见的协议,过去这两个协议有两个不同的角色。PROFINET通常用于现场设备和本地控制器之间的实时数据通信。而OPC UA通常用于在本地控制器和更高级别的MES和SCADA系统之间进行通信。 OPC UA 网络架构 PROFINET网络由IO控制器和IO设备组成&…

【数据结构】什么是树?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 📌树的定义 树(Tree)是n(n≥0)个结点的有限集.n0时称为空树. 在任意一颗非空树中: 有且仅有一个特定的称为根(Root)的结点;当n>1时,其余结点可分为m(m>0)个互…

Laravel框架使用phpstudy本地安装的composer用Laravel 安装器进行安装搭建

一、首先需要安装Laravel 安装器 composer global require laravel/installer 二、安装器安装好后,可以使用如下命令创建项目 laravel new sys 三、本地运行 php artisan serve 四、 使用Composer快速安装Laravel5.8框架 安装指定版本的最新版本(推荐&a…

怎样写一个C语言程序计算以下问题?

怎样写一个C语言程序计算以下问题? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C语言的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家&#xff01…

Python 将RTF文件转为Word 、PDF、HTML

RTF也称富文本格式,是一种具有良好兼容性的文档格式,可以在不同的操作系统和应用程序之间进行交换和共享。有时出于不同项目的需求,我们可能需要将RTF文件转为其他格式。本文将介如何通过简单的Python代码将RTF文件转换为Word Doc/Docx、PDF、…

MySQL数据库基础和基本的增删改查操作

目录 前瞻 数据库的基本概念 数据库管理系统(DBMS) 数据库系统(DBS) 数据库类型和常用数据库 关系型数据库 SQL 非关系型数据库 NoSQL SQL语句 简介 SQL语句分类 常用的数据类型 MySQL的六大约束特性 SQL语句的使用 创建及删除数据库和表 …

【小白专用】php以pdo方式连接sqlserver,开启sqlsrv扩展

一、安装ODBC程序, 下载适用于 SQL Server 的 ODBC 驱动程序 - 适用于 SQL Server 的 ODBC 驱动程序 |Microsoft 学习 运行安装程序,出现如下图所示页面; 选择下一步;选择我同意许可协议中的条款后选择下一步; 点击安…

c语言易错题之数据类型变换

1.题目 #include<stdio.h> int main() {int arr[]{1,2,3,4,5};short*p (short*)arr;int i 0;for(i0;i<4;i){*(pi)0;}for(i0;i<5;i){printf("%d ",arr[i];}return 0; }2.解析 这道题主要容易错在&#xff0c;大家会以为通过指针赋值的时候&#xff0c;…

初级数据结构(七)——二叉树

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;六&#xff09;——堆 | NULL 下一篇-> 1、写在前面 二叉树的基本概念在《初级数据结构&#xff08;五&#xff09;——树和二叉树的概念》中已经介绍得足够详细了。上一…

AcWing算法提高课-1.4.2股票买卖 IV

算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 给定一个长度为 n n n 的数组&#xff0c;数组中的第 i i i 个数字表示一个给定股票在第 i i i 天的价格。 设计一个算法来计算你所能获取的最大利润&#xff0c;你最多可以完成 k k k 笔交易…

【工具使用-有道云笔记】如何在有道云笔记中插入目录

一&#xff0c;简介 本文主要介绍如何在有道云笔记中插入目录&#xff0c;方便后续笔记的查看&#xff0c;供参考。 二&#xff0c;具体步骤 分为两个步骤&#xff1a;1&#xff0c;设置标题格式&#xff1b;2&#xff0c;插入标题。非常简单~ 2.1 设置标题格式 鼠标停在标…

论文阅读——Flamingo

Flamingo: a Visual Language Model for Few-Shot Learning 模型建模了给定交织的图片或支视频的条件下文本y的最大似然&#xff1a; 1 Visual processing and the Perceiver Resampler Vision Encoder&#xff1a;from pixels to features。 预训练并且冻结的NFNet&#xff…

C++的面向对象学习(4):对象的重要特性:构造函数与析构函数

文章目录 前言&#xff1a;将定义的类放在不同文件夹供主文件调用的方法一、构造函数与析构函数1.什么是构造函数和析构函数&#xff1f;2.构造函数和析构函数的语法3.构造函数的具体分类和调用方法①总的来说&#xff0c;构造函数分类为&#xff1a;默认无参构造、有参构造、拷…

【RocketMQ每日一问】rocketmq事务消息原理?

rocketmq事务消息原理&#xff1f; RocketMQ的事务消息主要由三部分组成&#xff1a;半消息&#xff08;Half Message&#xff09;、执行本地事务和事务补偿机制。下面详细介绍这三部分&#xff1a; 半消息&#xff08;Half Message&#xff09;用户向RocketMQ发送半消息&…

多臂老虎机算法步骤

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…

antdv中的slider组件会默认将min值传递给value

如果是使用响应式变量&#xff0c;会将min的值传递到v-model对应的变量里

最大化控制资源成本 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你设计算法帮他们解决一个任务分布问题:有taskNum项任务,每人任务有开始时间(startTime) ,结更时间(endTme) 并行度(paralelism) 三个属性,并行度是指这个…