vue2、vue3,生命周期详解

一、Vue2.x

Vue2的生命周期

是指Vue实例从创建到销毁的整个过程中,会经历一系列的阶段和回调函数。它分为8个阶段,包括了组件的创建、挂载、更新和销毁等过程。

1、beforeCreate:

在实例初始化之后,但在数据观测和事件配置之前被调用。此时,data和methods等选项尚未初始化,并且无法访问this。

2、created:

实例已经完成数据观测和事件配置,但挂载阶段还未开始。在这个阶段,可以访问data和methods,并且可以进行一些异步操作。

3、beforeMount:

在挂载开始之前被调用。此时,模板编译已经完成,但尚未将模板渲染到DOM中。

4、mounted:

挂载完成时被调用。此时,实例已经将模板渲染到DOM中,并且可以对DOM进行操作。通常在这个阶段进行一些初始化的工作,比如获取远程数据。

5、beforeUpdate:

数据更新时调用,但在DOM重新渲染之前。在这个阶段,可以对数据进行一些处理或做一些其他操作。

6、updated:

数据更新完成时调用。此时,DOM已经重新渲染,可以对更新后的DOM进行操作。

7、beforeDestroy:

实例销毁之前调用。在这个阶段,实例仍然完全可用,可以进行一些清理工作。

8、destroyed:

实例销毁之后调用。在这个阶段,实例已经被销毁,所有的事件监听器和子组件也都被移除。

这些生命周期钩子函数提供了在不同阶段执行代码的机会,让我们可以更好地控制Vue实例的行为。

两个特殊的生命周期钩子函数

1、activated:

在使用<keep-alive>组件时调用。activated钩子函数在被缓存的组件激活时调用,可以用来执行一些需要在组件被激活时触发的操作。

2、deactivated:

在使用<keep-alive>组件时调用。deactivated钩子函数在被缓存的组件停用时调用,可以用来执行一些需要在组件被停用时触发的操作。

这两个钩子函数主要用于处理缓存组件(通过<keep-alive>包裹的组件)的状态变化,比如在页面切换时,缓存的组件从激活状态切换到停用状态,或者从停用状态切换到激活状态时,可以在这两个钩子函数中进行一些操作,例如更新数据、发送请求等。

总结起来,Vue的生命周期是指Vue实例从创建到销毁的整个过程中,会经历一系列的阶段和回调函数。这些生命周期钩子函数提供了在不同阶段执行代码的机会,让我们可以更好地控制Vue实例的行为,并且还有特殊的钩子函数用于处理缓存组件的状态变化。

两个全局的过渡钩子函数

1、beforeEnter:

在进入过渡之前调用。可以在此函数中定义进入过渡前的初始状态。

2、enter:

进入过渡完成时调用。可以在此函数中定义进入过渡后的最终状态。

这两个过渡钩子函数与Vue的过渡系统相关,用于定义元素进入过渡动画的状态。

自定义的钩子函数

1、beforeRouteEnter:

在路由进入组件前被调用。该钩子函数可以在组件加载前进行一些处理,比如获取数据、权限验证等操作。

2、beforeRouteUpdate:

在当前路由复用组件时调用(例如,从A路由跳转到B路由再返回A路由)。该钩子函数可以用来对路由参数或查询进行响应,以及在不同参数下重新执行组件逻辑。

3、beforeRouteLeave:

在离开当前路由时调用。该钩子函数可以用来做一些确认保存或取消操作,例如提示用户保存修改或取消离开。

这些自定义钩子函数是与Vue Router结合使用的,用于实现在路由切换过程中的额外逻辑处理。

总结起来,除了常见的生命周期钩子函数、特殊的钩子函数和全局的过渡钩子函数之外,Vue还提供了一些自定义的钩子函数,用于与Vue Router结合使用,在路由切换过程中进行额外的逻辑处理。这些钩子函数可以帮助我们更好地控制组件的行为并实现更丰富的交互体验。

其他较少使用的钩子函数

1、activated:

在 keep-alive 组件被激活时调用。keep-alive 组件用于缓存组件实例,当组件被激活时,activated 钩子函数会被调用。

2、deactivated:

在 keep-alive 组件被停用时调用。当组件被停用时,deactivated 钩子函数会被调用。

3、errorCaptured:

在捕获一个来自子孙组件的错误时调用,常用于全局错误处理。

4、render:

在组件 DOM 渲染完成后调用,可以在此钩子函数中访问到组件的真实 DOM 元素。

这些补充的钩子函数通常是为了满足特定的需求而存在的,并不是在每个组件中都常用到的。开发者根据具体场景和需求来选择是否使用这些钩子函数。

二、vue3.x

Vue 3生命周期

Vue 3 由于引入了组合式API,生命周期钩子函数的使用方式有所变化。下面是Vue 3中常见的生命周期钩子函数及其对应的组合式API:

  1. beforeCreate(已被移除) => 在组件实例初始化之前调用。 对应的组合式API:在 <script setup> 中直接编写初始化逻辑。
  2. created(已被移除) => 在组件实例创建完成后调用。 对应的组合式API:在 setup() 函数中编写初始化逻辑。
  3. beforeMount(被取代) => 在组件挂载到DOM之前调用。 对应的组合式API:可以在 onBeforeMount 钩子函数中进行操作。
  4. mounted(被取代) => 在组件挂载到DOM后调用。 对应的组合式API:可以在 onMounted 钩子函数中进行操作。
  5. beforeUpdate(被取代) => 在组件更新之前调用。 对应的组合式API:可以在 onBeforeUpdate 钩子函数中进行操作。
  6. updated(被取代) => 在组件更新之后调用。 对应的组合式API:可以在 onUpdated 钩子函数中进行操作。
  7. beforeDestroy(被取代) => 在组件卸载之前调用。 对应的组合式API:可以在 onBeforeUnmount 钩子函数中进行操作。
  8. destroyed(被取代) => 在组件卸载之后调用。 对应的组合式API:可以在 onUnmounted 钩子函数中进行操作。

需要注意的是,Vue 3中已经移除了一些生命周期钩子函数(如beforeCreate和created,beforeDestroy和destroyed),并且将它们替换为 onBeforeUnmount 和 onUnmounted。记住创建前后被setup取代,其他的前面加上了on。

此外,在使用 <script setup> 语法时,可以使用 definePropsdefineEmitswithDefaults 等组合式API来定义和处理组件的属性和事件。这些 API 可以在 setup() 函数内部调用,以增强对组件的控制。

总结起来,Vue 3中的生命周期钩子函数在使用方式上有所变化,通过组合式API中提供的钩子函数和相关函数,可以灵活地处理组件的初始化、更新和卸载等阶段的操作。

组合式API,setup():

在Vue 3中,引入了一个新的组合式API,用于替代Vue 2中的选项式API(如data、methods等)。这个新的API被称为"setup"。

"setup"函数是组件的入口点,在组件实例化之前执行。它接收两个参数:props和context。其中,props是组件的属性对象,context包含了一些上下文相关的属性和方法。

在"setup"函数中,可以使用响应式API(如ref、reactive)创建响应式数据、定义计算属性(通过computed)以及编写事件处理函数等。此外,还可以访问到父组件传递的props,并将其用于组件内部的逻辑。

下面是一个简单的示例:

<script>
import { ref } from 'vue';

export default {
  props: ['initialCount'],
  setup(props) {
    // 创建一个响应式的计数器
    const count = ref(props.initialCount || 0);

    // 定义一个增加计数的方法
    const increment = () => {
      count.value++;
    };

    return {
      count,
      increment
    };
  }
};
</script>

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

在上面的示例中,我们通过"setup"函数创建了一个响应式的计数器变量count,并定义了一个增加计数的方法increment。然后,将这些值返回给模板中使用。

需要注意的是,在"setup"函数中返回的变量和方法会暴露给模板,因此可以在模板中直接使用。而在Vue 2中,这些属性和方法需要在data或methods选项中声明,才能在模板中使用。

总结起来,"setup"函数是Vue 3中引入的组合式API的入口点,用于组件的初始化设置。在该函数中,我们可以使用响应式API创建响应式数据、定义计算属性、编写事件处理函数等,并将它们返回供模板使用。这种方式相较于Vue 2的选项式API更加灵活和直观。

<script setup>

在Vue 3中,还引入了一个更简洁的语法糖<script setup>,用于简化组件的"setup"函数的编写。使用<script setup>标签,可以将组件的选项和模板代码整合到同一个块内。

下面是一个使用<script setup>的示例:

<script setup>
import { ref } from 'vue';

const count = ref(0);

const increment = () => {
  count.value++;
};
</script>

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

在上述示例中,我们使用<script setup>标签来替代传统的<script>标签,并将组件的选项(如import语句、变量声明等)直接放在<script setup>中。这样做的好处是可以更紧凑地组织代码,不需要显式地返回选项对象。

需要注意的是,使用<script setup>时,模板中的数据和方法都会自动与setup()函数的作用域绑定,无需再通过返回对象的方式将它们暴露给模板。

总结起来,<script setup>是Vue 3中的一个新特性,用于简化"setup"函数的编写。通过将组件的选项和模板代码放在同一个块内,可以使代码更加简洁和直观。这种方式提高了开发效率并降低了代码量。

这个时候就有人要问了,<script setup> 和 setup的区别是什么?

<script setup> 和 setup() 是 Vue 3 中组合式 API 的两种不同写法,它们之间有以下区别:

  1. 语法:<script setup> 是一种特殊的 <script> 标签语法糖,用于简化组件的编写。而 setup() 是一个普通的函数,作为组件选项中的一个属性存在。
  2. 代码组织:使用 <script setup> 可以将组件的选项和模板代码整合到同一个块内,使得代码更加紧凑和直观。而在 setup() 中,需要显式地返回一个对象,将数据和方法暴露给模板使用。
  3. 作用域:在 <script setup> 中,模板中的数据和方法会自动与 setup() 函数的作用域绑定,无需再通过返回对象的方式暴露给模板。而在 setup() 中,需要通过返回一个对象来将数据和方法暴露给模板使用。
  4. 响应式:在 <script setup> 中,可以使用响应式 API(如 refreactive)创建响应式数据。而在 setup() 中,如果要创建响应式数据,需要手动导入相应的响应式 API 并进行设置。
  5. Vuex 和路由:在 <script setup> 中,不能直接使用 Vuex 和路由相关的功能。而在 setup() 中,可以通过导入相应的库并使用它们提供的 API 进行状态管理和路由控制。

总的来说,<script setup> 是一种更简洁和直观的写法,可以将组件选项和模板代码整合到一起。而 setup() 则是一个函数,提供了更大的灵活性和可扩展性,适用于更复杂的场景。开发者可以根据具体情况选择使用 <script setup> 还是 setup() 来编写组件。

附送250套精选项目源码

源码截图

源码获取:关注公众号「码农园区」,回复 【源码】,即可获取全套源码下载链接

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

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

相关文章

【Linux编译器-gcc/g++使用】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 设计样例&#xff0c;先见一下 方案一&#xff1a; 方案二&#xff1a; 在企业里面一般维护软件的源代码的话&#xff0c;要维护几份&#xff1f; 方案一&…

如何在短时间内制作出专业的产品说明书模板

产品说明书是企业向客户介绍产品的重要工具&#xff0c;能够直观地展示产品特点、功能以及使用方法。一个好的产品说明书模板可以帮助企业在短时间内制作出专业的产品说明书。那么怎样去做这个产品说明书模板呢&#xff1f;其实主要关注以下几个关键要素。 | 一、明确产品需求和…

x-cmd pkg | 7za - 7-Zip 的命令行版本

目录 简介首次用户主要特征竞品和相关作品进一步阅读 简介 7za 是一个开源的文件压缩和解压工具&#xff0c;是 7-Zip 的命令行版本。 7z 是一种拥有极高压缩比的格式&#xff0c;7za 提供压缩&#xff0c;解压&#xff0c;列举文件等功能除此之外&#xff0c;7za 还支持多种…

多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现EVO-TCN-Multihead-Attention能量谷算法优化时间卷积网络结合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资…

jQuery语法知识(DOM操作)

一、class 属性: .addClass&#xff08;&#xff09;、.hasClass&#xff08;&#xff09;.removeClass&#xff08;&#xff09;、.toggleClass&#xff08;&#xff09; 二、DOM 插入并包裹现有内容 1、.wrap( wrappingElement): 在每个配的元素外层包上一个html元素。 …

Day45 动态规划part07 70.爬楼梯(进阶) 322. 零钱兑换 279. 完全平方数

动态规划part07 70.爬楼梯&#xff08;进阶&#xff09; 322. 零钱兑换 279. 完全平方数 70.爬楼梯&#xff08;进阶&#xff09;&#xff08;题目链接点我&#xff09; #include<iostream> #include<vector> using namespace std;int main(){int n,m;cin>>…

vit细粒度图像分类(一)CADF学习笔记

1.摘要&#xff1a; 目的 基于Transformer架构的网络在图像分类中表现出优异的性能。然而&#xff0c;注意力机制往往只关注图像中的显著性特征&#xff0c;而忽略了其他区域的次级显著信息&#xff0c;基于自注意力机制的Transformer也是如此。为了获取更多的有效信息&#…

基于51单片机的智能烘干机设计

基于51单片机的智能烘干机设计[proteus仿真] 温湿度检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的智能烘干机设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&#x…

python高级(1): 迭代器详解

文章目录 1. 迭代器与可迭代对象(Iterable)1.1 可迭代对象(Iterable)1.2 迭代器( Iterator) 2. 自定义一个可迭代器2.1 实现迭代器2.2 for 遍历迭代器的过程 3. yolov8 Dataset实现案例 Python迭代器的作用是提供一种遍历数据集合的方式。它是一个可以被迭代的对象&#xff0c;…

使用 Redis 的 List 数据结构实现分页查询的思路

假设有一个存储数据的 List&#xff0c;每个元素代表一个记录&#xff0c;例如 recordsList。 按页存储数据&#xff1a; 每页存储一定数量的记录。例如&#xff0c;第一页存储索引 0 到 N-1 的记录&#xff0c;第二页存储索引 N 到 2N-1 的记录&#xff0c;以此类推。 分页查…

文件上传到本地

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head> <body><form action"/upload" method"post" enctype"multipart/form-data&…

小黑艰难的前端啃bug之路:内联元素之间的间隙问题

今天开始学习前端项目&#xff0c;遇到了一个Bug调了好久&#xff0c;即使margin为0&#xff0c;但还是有空格。 小黑整理&#xff0c;用四种方法解决了空白问题 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></tit…

部署TOMCAT详解

目录 一、Tomcat概述 1.1Tomcat简介 1.2、Tomcat历史 1.3Tomcat官网 二、部署单实例Tomcat 1.下载Tomcat包 2. 解压Tomcat包 3.配置环境变量 4.刷新环境变量 5.查看tomcat是否安装成功 6.启动Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2.webapps目录介绍 3…

量子网络是什么

量子网络是基于量子力学规律对量子信息进行存储、处理和传输的物理装置&#xff0c;是实现量子通讯和大规模量子计算的基础。清华大学研究团队利用同种离子的双类型量子比特编码&#xff0c;在国际上首次实现无串扰的量子网络节点&#xff0c;对未来实现量子通讯和大规模量子计…

Springboot集成规则引擎框架-LiteFlow

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

mysql调优-Join多种连接方式

简单嵌套循环连接 r为驱动表&#xff0c;s为匹配表&#xff0c;可以看到从r中分别取出每一个记录去匹配s表的列&#xff0c;然 后再合并数据&#xff0c;对s表进行r表的行数次访问&#xff0c;对数据库的开销比较大 索引嵌套循环连接 这个要求非驱动表&#xff08;匹配表s&…

Linux中目录的操作和文件属性获取(opendir、readdir、close函数的使用)

访问目录 opendir函数 #include <dirent.h> DIR *opendir(const char *name); DIR *fdopendir(int fd); 使用文件描述符&#xff0c;要配合open函数使用 DIR是用来描述一个打开的目录文件的结构体类型 成功时返回目录流指针&#xff1b;出错时返回NULLreaddir函数 #incl…

Adobe Media Encoder 2023下载安装教程,ME 2023安装教程,附安装包和工具,无套路,轻松搞的安装

前言 Adobe Media Encoder是一个视频和音频编码应用程序&#xff0c;可让针对不同应用程序和观众&#xff0c;以各种分发格式对音频和视频文件进行编码。包括专门设计的预设设置&#xff0c;以便导出与特定交付媒体兼容的文件&#xff0c;可以按适合多种设备的格式导出视频&am…

【医学图像数据增强】切割-拼接(CS-DA)

切割-拼接CS-DA CS-DA 核心思想自然图像和医学图像之间的关键差异CS-DA 步骤确定增强后的数据数量 代码复现 CS-DA 核心思想 论文链接&#xff1a;https://arxiv.org/ftp/arxiv/papers/2210/2210.09099.pdf 大多数用于医学分割的数据增强技术最初是在自然图像上开发的&#x…

Git 教程 | 将本地修改后的文件推送到 Github 指定远程分支上

Git 是一种分布式版本控制系统&#xff0c;用于敏捷高效地处理任何大小的项目。它是由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的开源版本控制软件。Git 的本地克隆就是一个完整的版本控制存储库&#xff0c;无论脱机还是远程都能轻松工作。开发人员会在本地提交其工…