一篇读懂React、vue框架的生命周期函数

news2024/11/28 2:55:50

当涉及到前端框架时,React 和 Vue.js 是两个非常受欢迎的选择。它们都提供了强大的工具和功能,帮助开发者构建交互式的、可扩展的应用程序。在这两个框架中,生命周期函数是一个重要的概念,它们允许我们在组件的不同阶段执行特定的代码。

React 和 Vue.js 的生命周期函数提供了一种组件生命周期管理的机制,让我们能够在组件的创建、更新和销毁等不同阶段执行特定的操作。这些函数包括在组件实例化、挂载到DOM、更新、卸载等过程中被自动调用,使我们能够在关键时刻对组件进行控制和操作。

在本篇博客中,我们将深入探讨 React 和 Vue.js 中的生命周期函数。我们将学习每个框架中不同生命周期阶段的函数,并了解它们的执行顺序和用途。我们将探索生命周期函数的重要性,以及如何使用它们来处理数据加载、状态管理、DOM 操作以及其他常见的开发任务。

无论你是 React 还是 Vue.js 的开发者,理解生命周期函数是非常重要的,它们可以帮助你编写更可靠、高效的代码。通过掌握这些函数,你将能够更好地管理组件的状态、响应用户交互,并优化应用程序的性能。

在本博客中,我们将提供详细的示例代码和解释,帮助你理解 React 和 Vue.js 中各个生命周期函数的作用和用法。无论你是新手还是有经验的开发者,我们相信这篇博客将为你提供宝贵的知识和指导,让你更加熟悉和自信地使用 React 和 Vue.js 的生命周期函数。

Vue.js 生命周期:

图文解释

在这里插入图片描述

  • beforeCreate:在实例初始化之后、数据观测 (data observer) 和 event/watcher 事件配置之前被调用。
  • created:实例已经创建完成,进行数据观测 (data observer),属性和方法的运算,但还没有挂载到 DOM 上。
  • beforeMount:在模板编译/挂载之前被调用,相关的 render 函数首次被调用。
  • mounted:实例已经挂载到 DOM 上后被调用,可以访问到 DOM 元素。
  • beforeUpdate:数据更新时,在重新渲染之前被调用。
  • updated:数据更新并重新渲染后被调用。
  • beforeDestroy:实例销毁之前被调用,可以在这个阶段进行一些清理工作。
  • destroyed:实例已经销毁后被调用,所有的事件监听器和子组件都被移除。

举例说明

在Vue中,当刷新浏览器时,Vue实例的完整声明周期过程如下:

new Vue({
  beforeCreate() {
    console.log('beforeCreate');
  },
  created() {
    console.log('created');
  },
  beforeMount() {
    console.log('beforeMount');
  },
  mounted() {
    console.log('mounted');
  },
  beforeUpdate() {
    console.log('beforeUpdate');
  },
  updated() {
    console.log('updated');
  },
  beforeDestroy() {
    console.log('beforeDestroy');
  },
  destroyed() {
    console.log('destroyed');
  },
});

在浏览器刷新时,控制台将按照以下顺序打印生命周期函数的信息:

  1. beforeCreate: 在Vue实例被创建之前触发。
  2. created: 在Vue实例被创建之后触发,此时Vue实例已经完成了数据观测、属性和方法的配置。
  3. beforeMount: 在Vue实例挂载到DOM元素之前触发。
  4. mounted: 在Vue实例挂载到DOM元素之后触发,此时可以操作DOM元素。
  5. beforeUpdate: 在Vue实例更新之前触发,此时数据已经发生了变化。
  6. updated: 在Vue实例更新之后触发,此时DOM已经更新完成。
  7. beforeDestroy: 在Vue实例销毁之前触发,可以进行一些清理操作。
  8. destroyed: 在Vue实例销毁之后触发,此时Vue实例已经被完全销毁。

注意,刷新浏览器会触发Vue实例的重新创建和挂载过程,因此会依次触发beforeCreate、created、beforeMount和mounted生命周期函数的信息。更新和销毁阶段的生命周期函数不会在刷新浏览器时被触发。

React 生命周期:

图文解释

在这里插入图片描述

  • constructor:组件实例化时调用,用于初始化 state 和绑定方法。
  • static getDerivedStateFromProps:在组件实例化和更新过程中调用,用于根据 props 更新 state。
  • render:根据当前的 state 和 props 渲染组件的 UI。
  • componentDidMount:组件挂载后调用,可以进行 DOM 操作、网络请求等副作用操作。
  • shouldComponentUpdate:决定组件是否需要重新渲染。
  • getSnapshotBeforeUpdate:在组件更新之前获取当前的 DOM 状态,常用于保存滚动位置等操作。
  • componentDidUpdate:组件更新后调用,可以进行 DOM 操作、网络请求等副作用操作。
  • componentWillUnmount:组件销毁前调用,用于清理定时器、取消网络请求等操作。

举例说明

在React中,当刷新浏览器时,React组件的完整生命周期过程如下:

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    console.log('constructor');
  }

  componentDidMount() {
    console.log('componentDidMount');
  }

  componentDidUpdate() {
    console.log('componentDidUpdate');
  }

  componentWillUnmount() {
    console.log('componentWillUnmount');
  }

  render() {
    console.log('render');
    return (
      <div>
        {/* JSX内容 */}
      </div>
    );
  }
}

在浏览器刷新时,控制台将按照以下顺序打印生命周期函数的信息:

  1. constructor: 组件的构造函数,在组件实例化时被调用,用于初始化组件的状态和绑定方法。
  2. render: 组件的渲染函数,在组件渲染时被调用,返回JSX元素用于构建DOM结构。
  3. componentDidMount: 组件挂载到DOM节点之后被调用,可以进行DOM操作、网络请求等副作用操作。
  4. componentDidUpdate: 组件更新完成后被调用,可以处理组件更新时的额外逻辑。
  5. componentWillUnmount: 组件即将从DOM节点中卸载时被调用,可以进行一些清理操作,如取消订阅、清除定时器等。
    注意,刷新浏览器时,React组件的完整生命周期过程只包括constructor、render和componentDidMount。componentDidUpdate和componentWillUnmount等生命周期函数将在组件更新和卸载过程中触发,而不会在刷新浏览器时被调用。

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

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

相关文章

车规芯片物理实现上的难度

在PR部分&#xff0c;车规级芯片的温度范围根据芯片工作位置不同也有所差别&#xff0c;最差的位置需要-40到150&#xff0c;除了DFM和功耗以及EM比较严格外&#xff0c;有些产品物理实现上对运算逻辑单元的位置也有特殊要求。 DFT部分才是车规级芯片的难点&#xff0c;感兴趣…

软件设计模式与体系结构-设计模式-行为型软件设计模式-迭代器模式

行为型软件设计模式 概述 行为型设计模式是软件设计模式中的一类&#xff0c;用于处理对象之间的交互和通信。这些模式关注的是对象之间的行为和职责分配。以下是几种常见的行为型设计模式&#xff1a; 观察者模式&#xff08;Observer Pattern&#xff09;&#xff1a;定义了…

【网络安全带你练爬虫-100练】第4练:添加异常处理代码

目录 一、异常处理代码&#xff1a; 二、执行结果&#xff1a; 三、完整代码&#xff1a; &#xff08;当代码越来越长的时候&#xff0c;异常处理代码有时候能起到很好的作用&#xff09; 一、异常处理代码&#xff1a; &#xff08;1&#xff09;try-except搭配&#xff…

Stable Difussion 解决绘图图片灰暗模糊,让图像色彩更丰富

在使用Stable Difussion进行AI绘画的时候&#xff0c;使用VAE能够产生许多有趣的效果。其滤镜功能可根据需要调整图像的色彩饱和度&#xff0c;使图像产生不同的视觉效果。 如下图所示&#xff1a; 但是如果不使用VAE那你的图像可能就会变得灰暗。 文章目录 VAE用途VAE的使…

cspm是什么?对比pmp怎么样?

一、国标项目管理&#xff08;项目管理专业人员能力评级&#xff09;证书是什么&#xff1f; 证书样式 《项目管理专业人员能力评价要求》&#xff08;GB/T 41831-2022&#xff09;是2022年10月12日开始实施的一项中国国家标准&#xff0c;归口于全国项目管理标准化技术委员会。…

【问题】TypeError: Cannot read properties of undefined (reading ‘getStackAddendum‘)

问题描述 项目运行中&#xff0c;控制台提示类型错误&#xff0c;无法读取未定义的属性getStackAddendum TypeError: Cannot read properties of undefined (reading getStackAddendum) 原因分析&#xff1a; 在上述截图的错误日志中&#xff0c;有执行validateChildKeys和va…

初识C++:从零开始掌握神秘之门的钥匙

&#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ✨人生如寄&#xff0c;多忧何为 ✨ 目录 一、什么是C&#xff1f; 二、 C的发展史 三、C的重要性 3.1 语言的使用广泛度 3.2 在工作领域 3.2.1. 操作系…

Java压缩图片以及获取缩略图

Java压缩图片以及获取缩略图 前言使用到的类ToolkitMediaTrackerImageBufferedImageImageWriterImageIOImageWriteParamGraphics2D 工具类ImageUtil测试测试代码测试结果 遇到的问题 前言 这个应该就没啥多说的了&#xff0c;接触过图片操作的基本都知道上述功能为常用功能。 …

Java-数据结构(一)-java1中有哪些数据结构呢?

这里写目录标题 前言一、为什么需要数据结构&#xff1f;1、低效的操作2、占用过多的内存空间3、困难的数据操作 二、枚举&#xff08;Enumeration&#xff09;1、定义2、关键字3、适用场景 三、 位集合&#xff08;BitSet&#xff09;1、定义2、方法3、适用场景 四、向量&…

Ping命令讲解

ping是什么&#xff1f; ping (Packet Internet Groper)&#xff0c;因特网包探索器&#xff0c;用于测试网络连接量的程序。Ping发送一个ICMP&#xff1b;回声请求消息给目的地并报告是否收到所希望的ICMP echo &#xff08;ICMP回声应答&#xff09;。它是用来检查网络是否通…

Java链式编程

一、链式编程 1.1.释义 链式编程&#xff0c;也叫级联式编程&#xff0c;调用对象的函数时返回一个this对象指向对象本身&#xff0c;达到链式效果&#xff0c;可以级联调用。 1.2.特点 可以通过一个方法调用多个方法&#xff0c;将多个方法调用链接起来&#xff0c;形成一…

3D数字化展馆三维设计的特点及优势

随着互联网技术的迭代&#xff0c;web3D技术和虚拟现实技术逐渐发展成熟&#xff0c;我们发现“三维数字展馆”这个词汇已经慢慢进入我们的视野。 三维数字展馆是属于存在于线上WEB端的虚拟三维数字展馆&#xff0c;利用3D建模技术打造一个充满科技感且可无限延伸的空间&#x…

【Linux】基础开发工具——vim篇

目录 一、vim的基本概念1.1 正常/普通/命令模式1.2 插入模式1.3 底行模式 二、vim的基本操作2.1 进入vim2.2 模式切换2.3 退出vim 三、命令模式命令集3.1 移动光标3.2 复制/粘贴3.3 撤销3.4 剪切/删除3.5 更改 四、底行模式命令集4.1 多文本操作4.2 保存/退出4.3 命令执行4.4 调…

第六步:NVIC中断优先级分组

CM4内核支持256个中断&#xff0c;其中包含了16个内核中断和240个外部中断&#xff0c;并且具有256级的可编程中断设置。 STM32F4并没有使用CM4内核的全部东西&#xff0c;而是只用了它的一部分。 STM32F40xx/STM32F41xx总共有92个中断。 STM32F42xx/STM32F43xx则总共有96个中断…

ModaHub魔搭社区:UCloud优刻得镜像市场上线Milvus向量数据库镜像

近日&#xff0c;为了更好地满足客户在AI业务场景下的需要&#xff0c;UCloud优刻得镜像市场上线支持了Milvus向量数据库镜像。 随着时代发展&#xff0c;文档资料、图片、语音、视频影像等非结构化数据开始海量涌现。为了能够更好地使用这些数据&#xff0c;可以使用embedding…

Jmeter参数传递——将上一个接口的返回结果做为变量传入下一个接口参数中

我们以CSDN文章发布为例&#xff1a; CSDN博客 - 专业IT技术发表平台CSDN博客为中国软件开发者、IT从业人员、IT初学者打造交流的专业IT技术发表平台,全心致力于帮助开发者通过互联网分享知识,让更多开发者从中受益,一同和IT开发者用代码改变未来.https://blog.csdn.net/ 注&…

Spark学习(一)---Spark简介和运行环境

文章目录 1.Spark介绍1.1 Spark核心模块1.2 使用Spark写一个WordCount1.2 Spark运行环境1.2.1 Local模式1.2.2 Standalone 模式1.2.3 高可用模式(HA)模式1.2.4 Yarn模式 1.Spark介绍 Hadoop中的MapReduce框架在设计之初并不是为了满足循环迭代式数据流处理&#xff0c;因此在多…

DMDSC共享存储集群启动、关闭及介绍

DMDSC介绍 DM 共享存储数据库集群&#xff08;DMDSC&#xff09;。DM共享存储数据库集群&#xff0c;允许多个数据库实例同时访问、操作同一数据库&#xff0c;具有高可用、高性能、负载均衡等特性。DMDSC 支持故障自动切换和故障自动重加入&#xff0c;某一个数据库实例故障后…

FastDFS【FastDFS环境搭建_Linux、FastDFS指令、复习】(二)-全面详解(学习总结---从入门到深化)

目录 FastDFS环境搭建_Linux FastDFS指令 复习&#xff1a; FastDFS环境搭建_Linux 下载安装gcc 安装方式为yum安装&#xff08;需网络&#xff09;&#xff1a; yum install gcc-c perl-devel pcre-devel openssl-devel zlib-devel wget 下载安装FastDFS wget https:/…

leetcode42. 接雨水(单调栈-java)

接雨水 leetcode42. 接雨水题目描述单调栈解题代码演示 单调栈专题 leetcode42. 接雨水 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/trapping-rain-water 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图…