生命周期的妙用——Vue3

news2024/9/23 3:32:01

Vue3的生命周期

  • 从Vue2到Vue3👾
    • 不只onMounted
    • 又见keep-alive
      • 主要属性
      • 被你包裹
      • 应用场景

)

从Vue2到Vue3👾

Vue 3 保留了大多数 Vue 2 的生命周期钩子,同时引入了组合 API 中的生命周期钩子。以下是 Vue 3 中的生命周期钩子:
在这里插入图片描述

不只onMounted

虽然很多新手开发者主要使用 mounted 钩子,但其他钩子在特定场景下也有其独特的用途。理解和善用这些钩子可以让你编写出更加高效和易于维护的 Vue.js 应用。

beforeCreate -> setup 中的逻辑:实例初始化之后,数据观测和事件配置之前。由于 setup 作为新的初始化阶段,一些原本在 beforeCreate 中的逻辑可以移到 setup 中。
用途:在组件实例初始化之后,数据观测和事件配置之前调用。此时还没有对 data、computed、watchers 等做初始化。
妙用:几乎不使用,因为在这个阶段无法访问组件中的任何属性或方法。可以用于某些高级调试或插件开发场景。

created -> setup 中的逻辑:实例已经创建完成,但未挂载到 DOM 上。大多数 created 中的逻辑可以移到 setup 中。
用途:实例已经创建完成,完成数据观测和事件配置,但还没有挂载到 DOM 上。
妙用:
进行 API 请求,初始化数据。
设置定时器(setInterval、setTimeout)。
访问和修改实例的 data、computed、methods。
订阅事件(event bus)。

beforeMount -> onBeforeMount:在挂载开始之前调用,相关的 render 函数首次被调用。
beforeMount
用途:在挂载开始之前调用,相关的 render 函数首次被调用。
妙用:很少单独使用,因为数据已经绑定但尚未生成 DOM。可以在 render 前做一些准备工作。

mounted -> onMounted:el 被新创建的 vm.$el 替换,并挂载到实例上。
用途:组件被挂载到 DOM 上后调用。
妙用:
操作 DOM 元素(获取元素高度、宽度,初始化第三方库)。
开始动画。
进行数据交互(监听 DOM 事件)

beforeUpdate -> onBeforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。
用途:在数据更新后、重新渲染 DOM 之前调用。
妙用:
在数据更新前执行一些操作,例如保存当前状态。
对比新旧数据,做一些预处理。

updated -> onUpdated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用。
用途:由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用。
妙用:
操作更新后的 DOM。
触发其他组件或外部 API 调用。

activated -> onActivated:keep-alive 组件激活时调用。
用途:keep-alive 组件激活时调用。
妙用:
恢复组件状态。
开始需要在激活状态下执行的任务(例如重启定时器)。

deactivated -> onDeactivated:keep-alive 组件停用时调用。
用途:keep-alive 组件停用时调用。
妙用:
暂停或清理需要在停用状态下停止的任务(例如清除定时器)。

beforeDestroy -> onBeforeUnmount:实例销毁之前调用,实例仍然完全可用。
用途:组件实例销毁之前调用,此时实例仍然完全可用。
妙用:
清除定时器。
取消订阅事件。
清理所有非自动清理的资源。

destroyed -> onUnmounted:实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。
用途:组件实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。
妙用:
完全清理组件相关的所有内容,确保不再保留任何引用。
可以进行一些日志记录或通知操作。

Vue 3 新增的生命周期钩子
onRenderTracked:响应式依赖被追踪时调用,用于调试。
onRenderTriggered:响应式依赖变化导致组件重新渲染时调用,用于调试。

又见keep-alive

keep-alive 是 Vue.js 提供的一个内置组件,用于缓存不活动的组件实例。它通常用于 或 之类的动态组件上,以避免重复创建和销毁组件,提升性能。

主要属性

keep-alive 组件提供了几个有用的属性:
include:字符串或正则表达式。只有匹配的组件会被缓存。
exclude:字符串或正则表达式。匹配的组件不会被缓存。
max:数字。缓存组件实例的最大数量。

被你包裹

当组件被 keep-alive 包裹时,它会多出两个特有的生命周期钩子 onActivatedonDeactivated

onActivated:当组件从缓存中激活时调用。可以在此钩子中执行一些需要在组件显示时执行的操作。
onDeactivated:当组件被缓存起来时调用。可以在此钩子中执行一些需要在组件隐藏时执行的操作。

应用场景

  1. 路由组件缓存:在使用 Vue Router 时,通过 keep-alive 缓存路由组件,可以避免路由切换时组件的销毁和重建,提升性能。
<template>
  <keep-alive>
    <router-view></router-view>
  </keep-alive>
</template>

  1. 多标签页切换:在实现类似浏览器多标签页切换的功能时,通过 keep-alive 可以缓存已经打开的标签页,避免重复加载和初始化。
  2. 表单数据保存:在表单组件切换时,通过 keep-alive 可以保留用户输入的数据,避免重复输入。

值得注意的是🤖

  1. onActivated 在组件挂载时也会调用,并且 onDeactivated 在组件卸载时也会调用。
  2. 这两个钩子不仅适用于 < KeepAlive > 缓存的根组件,也适用于缓存树中的后代组件。
  3. 由于 keep-alive 会缓存组件实例,因此组件的状态(如 data 和 computed)在组件被缓存和激活时会保持不变。这在某些场景下可能需要特别处理。
  4. 虽然 keep-alive 可以提升性能,但如果缓存的组件数量过多,可能会占用较多的内存资源。因此需要合理设置 max 属性。

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

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

相关文章

R语言进行集成学习算法:随机森林

# 10.4 集成学习及随机森林 # 导入car数据集 car <- read.table("data/car.data",sep ",") # 对变量重命名 colnames(car) <- c("buy","main","doors","capacity","lug_boot","safety"…

linux下JDK的安装

前言&#xff1a; 安装部署java开发的代码都需要java环境&#xff0c;这里记录下linux下JDK的安装过程&#xff0c;仅供学习参考。 JDK的下载 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads 选择和操作系统匹配的版本进行下载 查看操作系统&…

记录些MySQL题集(11)

MySQL 组提交原理 MySQL 中事务的两阶段提交保证了 redo log 与 binlog 两种日志文件的数据一致性&#xff0c;但是并发事务场景下还需要保证事务顺序的一致性&#xff0c;因此通过组提交机制在保证顺序一致性的前提下提高写入效率。因此组提交是两阶段提交的一部分。 两阶段…

JavaScript基础(十五)

变量&返回值 js中的变量有两种: 局部变量和全局变量 全局变量: 在函数外声明的变量&#xff0c;网页上的所有函数和脚本都能访问它。 局部变量&#xff1a; 在函数内部声明的变量&#xff08;必须使用var&#xff09;&#xff0c;只能在函数内部访问它&#xff0c;我们…

区分C语言中的全局变量和java中的类的变量

该程序运行结果&#xff1a; 原因&#xff1a; new Homework08().count1();中改变的count的值是该对象的count变量&#xff0c; 但是Homework08 t1 new Homework08(); t1.count2(); t1.count2();改变的都是t1变量的count的值 //20224.07.16public class Homework08 {public …

在组件中显示tuku的照片

一、问题 &#xff08;1&#xff09;错误&#xff1a;域名前面一定要加http://要不然会报错 &#xff08;2&#xff09;在使用 defineModel传值时一定要动态绑定&#xff0c;要不然图片不显示 &#xff08;3&#xff09;改完后在商品列表中显示图片信息必须 在显示的图片中取…

ARM体系结构和接口技术(六)KEY按键实验① 按键轮询检测

文章目录 一、按键轮询&#xff08;一&#xff09;分析按键的电路连接1. 按键原理图2. 按键消抖 二、分析芯片手册&#xff08;一&#xff09; GPIO章节&#xff08;二&#xff09;RCC章节 三、代码&#xff08;一&#xff09;key.c&#xff08;二&#xff09;key.h 一、按键轮…

基于python的笔记本电脑购买意愿影响因素分析,包括情感分析和聚类分析

摘要&#xff1a;本论文基于Python大数据视角&#xff0c;旨在分析笔记本电脑购买意愿的影响因素。通过爬取京东网站上的评论数据&#xff0c;使用多种技术和工具进行数据分析和处理。使用requests库爬取了大量的在线评论数据。利用pandas对数据进行清洗、处理和统计&#xff0…

实况:老菜鸟自力更生从零开始重学spring目标是画出一张唬人大图(三、spring启动的入口搭建源码阅读环境)

前情提要&#xff1a;源码下载&编译 速览 设计一个最简单的spring项目spring的入口在哪&#xff1f;怎么启动的&#xff1f;搭建源码阅读环境新建module并添加依赖编写一个微型spring项目&#xff08;配置bean->获取bean->使用bean&#xff09; 不打无准备之仗&…

windows下使用make编译C/C++程序 gcc编译 MinGW编译器

文章目录 1、概要2、编译环境搭建3、创建工程目录结构4、 编写程序4.1 编写头文件4.2 编写源文件 5、编写makefile及相关文件5.1 编写清理编译生成文件的批处理文件&#xff0c;供makefile调用5.2 编写makefile文件 6、编译工程6.1 打开命令行6.2 使用make命令编译程序6.3 编译…

【数据结构】二叉树———Lesson2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

QT CNA上位机报错 解决方案

QT编译报错: -lControlCAN 解决方案 更换三个文件&#xff0c;即可解决(QT 自带的是32位库&#xff0c;应使用64位库文件)

Linux系统编程---Make/MakeFile

认识make/makefile make是一个命令 makefile是一个当前目录下的文件。 make会自动推导makefile中的依赖关系&#xff0c;栈式结构。形成可执行文件 如何清理 在makefile文件里加上clean&#xff0c;运行时直接make clean&#xff0c;建议clean放在后面。 在没有改变源文件的…

深入学习STL标准模板库

C STL standard template libaray 标准模板库 目录 C STL standard template libaray 标准模板库 一、标准容器顺序容器vectordequelistvector deque list对比 容器适配器stackqueuepriority_queue 关联容器unordered_setunordered_multisetunordered_mapunordered_multimapset…

【C++基础】类和对象(4)

目录 一、再探构造函数 1.1 构造函数体赋值 1.2 初始化列表 二、类型转换 三、static成员 概念&#xff1a; 特性&#xff1a; 四、友元 4.1 友元函数 4.2 友元类 五、内部类 六、匿名对象 七、对象拷贝时的编译器优化 一、再探构造函数 1.1 构造函数体赋值 …

Admin.NET源码学习(2:安装并运行前端)

根据Admin.NET的GitHub主页介绍&#xff0c;前端运行步骤需要运行pnpm命令。百度pnpm的话&#xff0c;需要支持npm相关的命令支持。   根据参考文献4&#xff0c;安装Node.js后会提供npm命令支持&#xff08;npm是Node.js的软件包管理器&#xff0c;用于安装、发布和共享Jav…

在Linux系统安装MySQL有多简单

MySQL 是一种流行的开源关系数据库管理系统&#xff0c;广泛应用于各种类型的应用程序和服务。在安装TitanIDE​​​​​​​以后是没有MySQL服务的&#xff0c;我们需要单独安装安装MySQL。本文将介绍在 Linux 上安装 MySQL 的多种方式&#xff0c;包括离线安装、使用 Docker …

纤丝龙:强根固发,滋养头皮的天然秘诀

在我国传统中医学中&#xff0c;头发被视为“血之余&#xff0c;肾之华”&#xff0c;其生长与健康状况直接反映了人体的精神面貌和生命力。然而&#xff0c;现代生活节奏加快&#xff0c;压力不断增大&#xff0c;导致许多人出现头发干枯、分叉、脱落等问题。纤丝龙&#xff0…

“轻、灵、画、韵”,TCL第三代艺术电视引领艺术生活

7月17日&#xff0c;TCL第三代艺术电视A300系列正式上市&#xff0c;其中&#xff0c;A300 Pro配备B&O音响&#xff0c;共有65/75/85三个尺寸&#xff0c;首发到手价分别为8999元、11999元和15999元。不带Soundbar的A300W&#xff0c;它有55/65/75/85四个尺寸&#xff0c;首…

volatile关键字解析

一、volatile介绍 volatile是Java提供的一种轻量级的同步机制&#xff0c;在并发编程中&#xff0c;它也扮演着比较重要的角色。同synchronized相比&#xff08;synchronized通常称为重量级锁&#xff09;&#xff0c;volatile更轻量级&#xff0c;相比使用synchronized所带来的…