生命周期的妙用——Vue3

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://xiahunao.cn/news/3248939.html

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

相关文章

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(下:数据操作与查询)

文章目录 DML数据操作语言1、新增记录2、删除记录3、修改记录 DQL数据查询语言1、查询记录2、条件筛选3、排序4、函数5、分组条件6、嵌套7、模糊查询8、limit分页查询 集合操作union关键字和运算符in关键字any关键字some关键字all关键字 联合查询1、广义笛卡尔积2、等值连接3、…

HTML+JS+CSS计算练习

可填 题目数量 数字范围 计算符号 题目做完后会弹窗提示正确率、用时 效果图 源代码在图片后面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

【深度学习】inpaint图像中的alpha混合图的边缘处理

比如原图是&#xff1a; 红圈内就是文字水印&#xff0c;经过inpaint后得到图和原图混合&#xff0c;如何处理边界呢&#xff0c;这个代码可以干这事&#xff1a; 越是中心就直接用inpaint图&#xff0c;否则就用原图&#xff0c;这样进行alpha混合。 import numpy as np i…

js reduce 的别样用法

let mergedItems list.reduce((accumulator, currentItem) > {let existingItem accumulator.find((item) > item.manObject_name currentItem.manObject_name);if (existingItem) {existingItem.laborCostHand currentItem.laborCostHand; //劳务费existingItem.wor…

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 编译…

effective c++学习笔记1

Effective C 来源于阿西拜编程 《Effective C》2023&#xff08;上部完整版&#xff09; C进阶看这个_哔哩哔哩_bilibili 2024年7月15日 第一章 第1条 第7章&#xff0c;学完比较能够看懂&#xff0c;一般公司不推荐写模板&#xff08;调试麻烦&#xff0c;维护成本高&…

Anaconda创建新的环境一直报错

Anaconda创建新的环境一直报错 报错信息如下&#xff1a; CondaHTTPError: HTTP 404 NOT FOUND for url <https://pypi.tuna.tsinghua.edu.cn/simple/noarch/repodata.json> Elapsed: 00:01.358961The remote server could not find the noarch directory for the requ…

你的字典还是想改就改?试试Python MappingProxyType,让你的数据只读到底!

目录 1、初识MappingProxyType &#x1f50d; 1.1 MappingProxyType简介 1.2 不可变映射的优势 2、创建你的第一个MappingProxyType实例 &#x1f389; 2.1 使用dict创建MappingProxyType 2.2 获取MappingProxyType属性 3、探索MappingProxyType的方法和属性 &#x1f6…

HarmonyOS NEXT零基础入门到实战-第一部分

构建节页面思路&#xff1a; 1、排版 (分析布局) 2、内容&#xff08;基础组件&#xff09; 3、美化&#xff08;属性方法&#xff09; 设计资源-svg图标 界面中展示图标 ->可以使用svg图标&#xff08;任意放大缩小不失真&#xff0c;可以改颜色&#xff09; 使用方式&a…

Linux内核分析:VFS和文件系统

文章目录 写在前面下载链接思维导图一些问题使用slab进行分配的优势和意义如何理解这段话&#xff1a;Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上&#xff0c;从而让不同的文件系统结合成为一个整体。Linux 操作系统的一个重要特点是它支持…

apisix安装

安装依赖 如果当前系统没有安装 OpenResty&#xff0c;请使用以下命令来安装 OpenResty 和 APISIX 仓库&#xff1a; sudo yum install -y https://repos.apiseven.com/packages/centos/apache-apisix-repo-1.0-1.noarch.rpm如果已安装 OpenResty 的官方 RPM 仓库&#xff0c…

Clonezilla 备份还原过程推送日志到 syslog

Clonezilla 备份、还原过程中&#xff0c;系统的运行日志只能显示到客户端显示器上&#xff0c;如果出现错误&#xff0c;无法在服务端查询到对应的日志&#xff0c;一是故障判断不太方便&#xff1b;另一方面&#xff0c;实现日志推送&#xff0c;也可以将 Clonezilla 运行进度…

配置和保护SSH

使用SSH访问远程命令行 描述Secure Shell SSH&#xff08;Secure Shell&#xff09; 是一种网络协议&#xff0c;用于在不安全的网络上安全地进行系统管理和数据传输。它最初由 Tatu Ylnen 于1995年设计&#xff0c;并成为保护网络服务免受攻击的标准。SSH提供了多种功能&…

正则表达式(Ⅳ)——零宽断言

介绍 以……为开头/以……为结尾 正向表示匹配白名单 先行表示需要写在想要筛选的表达式之后 负向表示匹配黑名单 后行表示需要写在想要筛选的表达式之前 正向先行断言 这段比较复杂&#xff0c;我们拆开来看 \d(?PM) \d表示匹配数字&#xff0c;而且是匹配单个数字 表示…

【C++】C++ 职工信息管理系统(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

EXCEL的自定义功能

一、Excel文件获取 OFFICE中导入文本文件&#xff0c;CSV&#xff08;分隔符通常是逗号&#xff09;和TXT&#xff08;分隔符通常是Tab键&#xff0c;可以用记事本打开查看分隔符&#xff09;进入单元格&#xff0c;数据——获取外部数据——自文本。 WPS中数据——获取数据——…

Java学习高级四

JDK8开始&#xff0c;接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…

408一战130+|暑假四门课复习经验+资料分享

刚好我有点发言权 408想要考高分&#xff0c;其实很简单&#xff0c;学会抓住主要矛盾&#xff01; 是吗是主要矛盾&#xff0c;大家都知道&#xff0c;408学科四门课&#xff0c;分别是数据结构&#xff0c;计算机组成原理&#xff0c;操作系统&#xff0c;计算机网络。那么4…

Python进阶(4)--正则表达式

正则表达式 在Python中&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;简称Regex&#xff09;是一种强大的文本处理工具&#xff0c;它允许你使用一种特殊的语法来匹配、查找、替换字符串中的文本。 在这之前&#xff0c;还记得之前我们是通过什么方法分割…

【Python实战因果推断】42_合成控制2

目录 Matrix Representation Synthetic Control as Horizontal Regression Matrix Representation 在上文中&#xff0c;我向大家展示了一个用矩阵表示面板数据的图像&#xff0c;其中一个维度是时间段&#xff0c;另一个维度表示单位。合成控制明确使用了该矩阵&#xff0c;…