vue3中的生命周期

news2025/2/24 18:23:23

一、vue3中的选项式生命周期

Vue 3中的选项式生命周期钩子基本上与Vue 2保持一致,它们都是定义在Vue实例的对象参数中的函数,它们在Vue实例的生命周期的不同阶段被调用。简单来说,生命周期钩子就是Vue.js特别提供的一些函数,会在我们的实例挂在,更新,卸载等过程中被调用的函数

以下是Vue 3中主要的选项式生命周期钩子:

  1. beforeCreate:在实例初始化之后、数据观测(data observer)和event/watcher事件配置之前被调用。
  2. created:在实例创建完成后被立即调用,此阶段完成了数据观测,但未挂载DOM$el属性目前不可见。
  3. beforeMount:在挂载开始之前被调用,相关的render函数首次被调用。
  4. mounted:实例被挂载后调用,此时el被新创建的vm.$el替换了。
  5. beforeUpdate:数据更新时调用,发生在虚拟DOM打补丁之前。
  6. updated:由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。
  7. beforeUnmount:实例销毁之前调用。在这一步,实例仍然完全可用。
  8. unmountedVue实例销毁后调用。

例子:

export default {
  data() {
    return {
      message: 'Hello 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')
  },
  beforeUnmount() {
    console.log('beforeUnmount')
  },
  unmounted() {
    console.log('unmounted')
  }
}

以上例子定义了一个Vue实例,每一个生命周期钩子函数都会在相应的阶段执行并打印对应的生命周期钩子名称。这提供了在不同阶段进行定制化操作的可能,例如,我们可以在mounted生命周期钩子中进行DOM操作,在created生命周期钩子中进行数据的初始化等。

二、vue3中组合式生命周期

Vue3的组合式API提供了一套新的生命周期钩子,与Vue2中的选项式生命周期钩子有着对应关系。在Composition API中,组合式生命周期钩子有:

  1. onBeforeMount:对应Vue2中的beforeMount钩子,Vue实例挂载之前调用。

  2. onMounted:对应Vue2中的mounted钩子,Vue实例挂载完成后调用。

  3. onBeforeUpdate:对应Vue2中的beforeUpdate钩子,数据更新时调用,但在DOM更新前。

  4. onUpdated:对应Vue2中的updated钩子,数据更新后在DOM更新后调用。

  5. onBeforeUnmount:对应Vue2中的beforeDestroy钩子,Vue实例销毁前调用。

  6. onUnmounted:对应Vue2中的destroyed钩子,Vue实例销毁后调用。

当然啊,官方给出的钩子比这多,这里我只是列举出一些比较常用的。

vue3官网:https://cn.vuejs.org/api/composition-api-lifecycle.html#onrendertriggered

在这里插入图片描述

举个例子来理解:

import { ref, onBeforeMount, onMounted } from 'vue';

export default {
  setup() {
    const name = ref('Vue3');

    onBeforeMount(() => {
      console.log('onBeforeMount');
    });

    onMounted(() => {
      console.log('onMounted');
    });

    return {
      name
    };
  }
}

在这个例子中,我们首先通过 ref 创建了一个响应式引用 name,然后是 onBeforeMountonMounted 的生命周期钩子,分别对应 Vue2 中的 beforeMountmounted

在组件实例化时会首先执行 onBeforeMount 中的函数,输出 ‘onBeforeMount’,然后执行 onMounted 中的函数,输出 ‘onMounted’。

生命周期钩子的主要作用是在特定时点运行用户自定义的函数,这些函数可能包含数据获取、数据处理、状态修改等逻辑。利用这样的设计,开发者可以更好的控制代码执行的时机和逻辑。

在组合式API中,这些生命周期钩子不再像Vue2那样作为组件选项存在,而是独立的函数。这使得我们可以把相关逻辑组合在一起,理解和复用更方便。

三、vue3中选项式生命周期和组合式生命周期共存时的执行顺序

在Vue3中,组合式API和选项式API可以共存,对于生命周期钩子,在二者同时使用的情况下,其执行顺序为:首先执行组合式API的生命周期钩子,然后执行选项式API的生命周期钩子

比如在一个实体中,同时使用了组合式API的onMounted和选项式API的mounted,则执行顺序为先执行onMounted,然后执行mounted

以下是一个简单的例子:


import { onMounted } from 'vue'

export default {
  mounted() {
    console.log('选项式API的mounted生命周期钩子')
  },

  setup() {
    onMounted(() => {
      console.log('组合式API的onMounted生命周期钩子')
    });
  }
}

控制台输出的结果应该是:

'组合式API的onMounted生命周期钩子'
'选项式API的mounted生命周期钩子'

这就完成了检验生命周期钩子执行顺序的验证,首先是组合式API的onMounted,然后是选项式API的mounted。

四、vue2中的生命周期和vue3的组合式生命周期对比

Vue2 生命周期Vue3 生命周期功能描述
beforeCreatesetup在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
createdsetup在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event事件回调。然而,挂载阶段还没开始,$el属性目前还不可见。
beforeMountonBeforeMount在挂载开始之前被调用:相关的 render 函数首次被调用。
mountedonMountedel 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。
beforeUpdateonBeforeUpdate数据更新时调用,发生在虚拟DOM打补丁之前。这里适合在更新之前访问现有的DOM,比如手动移除已添加的事件监听器。
updatedonUpdated由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。
beforeDestroyonBeforeUnmount在实例销毁之前调用。在这一步,实例仍然完全可用。
destroyedonUnmounted在实例销毁之后调用。调用后,所有的事件监听器都会被移除,所有的子实例也都会被销毁。

Vue3 使用 Composition API 引入了新的生命周期钩子,但是它们和 Vue2 中的生命周期钩子有直接的对应。使用setup()来代替 beforeCreate created,并提供了一系列“on”钩子函数。

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

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

相关文章

服务级别协议 (SLA)管理

随着业务不断扩展以满足不断增长的客户需求,网络必须与相关需求保持同步。此外,对增强最终用户体验的需求在监控企业级网络时造成了许多瓶颈。网络管理员必须不断检查他们的网络,以确保所提供的服务质量很好。 虽然很难确保所提供的服务质量…

生成式AI:大语言模型ChatGPT交互的机制

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 与 ChatGPT 有效交互的快速工程 随着生成式人工智能的普及,特别是 ChatGPT,提示已成为人工智能世界中越来越重要的技能。制作提示,与大型语言模型&…

Flowable开始事件-信号开始事件

信号开始事件 信号开始事件一、定义1. 图形标记2. XML标记 二、测试用例2.1 信号开始事件xml文件2.2 信号开始事件测试用例 总结 信号开始事件 一、定义 接受特定的信号发起流程实例。 1. 图形标记 2. XML标记 消息开始事件的XML <!-- 定义信号 --> <signal id&quo…

MySQL(2)

建表 mysql> create table work(-> ‘部门号’ int(11) not null,-> ‘职工号’ int(11) not null,-> ‘工作时间’ date not null,-> ‘工资’ float(8,2) not null,-> ‘政治面貌’ varchar(10) not null default 群众,-> ‘姓名’ varchar(20) not nu…

数据结构与算法——什么是数据结构

当你决定看这篇文章&#xff0c;就意味着系统学习数据结构的开始。下面我们先来讲什么是数据结构。 数据结构&#xff0c;直白地理解&#xff0c;就是研究数据的存储方式。 我们知道&#xff0c;数据存储只有一个目的&#xff0c;即为了方便后期对数据的再利用&#xff0c;就如…

Pandas和Polars之间语法和速度比较

大家好&#xff0c;Pandas是数据科学中必不可少的Python库&#xff0c;但其最大的缺点是对大型数据集的操作速度较慢。Polars是一种旨在更快地处理数据的Pandas替代方案。 本文将简要介绍Polars Python包&#xff0c;并将其与流行的数据科学库Pandas在语法和速度方面进行比较。…

Spring WebFlux 实现原理与架构图

启动原理与架构图 通过spring-boot-autoconfigure中的spring.factories文件&#xff0c;通过Spring Boot自动初始化下列类&#xff1a;HttpHandlerAutoConfiguration、ReactiveWebServerFactoryAutoConfiguration、WebFluxAutoConfiguration、ErrorWebFluxAutoConfiguration、…

问题解决:idea克隆项目依赖无法解析

问题描述尝试解决方案 问题描述 从git远程仓库clone了一个springboot项目, 然后项目的pom.xml文件的依赖全部加载失败,全部是Project 某某某依赖 not found 的错误,几十条 代码就更不用看了,只要用到依赖,全部报错. 看着报错就头大 尝试解决方案 检查maven配置是否正确 检查是…

国内首个多主架构方案发布:数据库产业生态的一次开放式升维

文 | 智能相对论 作者 | 叶远风 作为数字化变革最仰仗的基础设施之一&#xff0c;数据库的建设已经成为当下的热点。 长期以来&#xff0c;通过数据库的自主创新来保证数据基础设施的安全可控&#xff0c;一直是业界以及众多行业客户的普遍愿望。 但是&#xff0c;这一进程…

TP4056充电管理芯片使用详解

一.芯片简介 TP4056充电管理芯片是一款常用的单节锂电池恒定电流/恒定电压线性充电管理芯片。 内部电路框图如下&#xff1a; 芯片采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路&#xff0c;无需增加外部隔离二极管。热反馈可对充电电流进行自动调节&#xff0c;以便在…

【Docker】error pulling image configuration: download failed after attempts=6: dial tc

问题&#xff1a;在学习Docker的时候遇到pull失败的情况 解决方法&#xff1a; sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"] } EOF sudo systemctl daemon…

【Visual Studio】在 Windows 上使用 Visual Studio 构建 VTK

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 1 版本环境2 构建步骤1 准备文件夹结构2 运行 CMake3 在 Visual Studio 中构建4 安装 VTK5 再次在 Visual Studio 中构建6 添加环境变量 3 测试是否…

基于妙记多 Mojidoc 剪藏内容和内容创建的工作流程

早在我开始创作之前&#xff0c;我就是一个信息消费者——收集想法和想法&#xff0c;但不对它们做任何事情。这给了我很多创建信息捕获和综合系统的经验。直到现在&#xff0c;我才有了适当的方法来分析我是如何做到的… 这是一个工作流程&#xff0c;可以在较多杂乱信息中增…

【Java】面向对象基础 之 静态字段和静态方法

1、静态字段 在一个class中定义的字段&#xff0c;我们称之为实例字段。实例字段的特点是&#xff0c;每个实例都有独立的字段&#xff0c;各个实例的同名字段互不影响。 还有一种字段&#xff0c;是用static修饰的字段&#xff0c;称为静态字段&#xff1a;static field。 …

Kkfileview | Docker | +Redis文件预览kkfile配置

文章目录 简介DockerRedis部署 简介 kkFileView为文件文档在线预览解决方案&#xff0c;该项目使用流行的spring boot搭建&#xff0c;易上手和部署&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 …

【Excel导出文件】

文章目录 课程内容1. 工作台1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码导入1.2.1 Controller层1.2.2 Service层接口1.2.3 Service层实现类1.2.4 Mapper层 1.3 功能测试1.3.1 接口文档测试1.3.2 前后端联调测试 2. Apache POI2.1 介绍2.2 入门案例2.2.1 将数据写…

微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明

微信小程序中的条件渲染和列表渲染 1. 条件渲染1.1. 语法格式 (wx:if, wx:elif ,wx:else)1.2. block标记1.3. hidden属性1.4. wx:if 与 hidden 的对比 2. 列表渲染2.1. wx:for 语法格式 及 wx:key的使用 1. 条件渲染 1.1. 语法格式 (wx:if, wx:elif ,wx:else) <view wx:if…

Vue+element-UI实现列表排序(sortable、custom)

1.sortable、custom区别&#xff1a; 在列中设置sortable属性即可实现以该列为基准的排序&#xff0c;接受一个Boolean&#xff0c;默认为false。 可以通过 Table 的default-sort属性设置默认的排序列和排序顺序。 可以使用sort-method或者sort-by使用自定义的排序规则。 如…

大数据Hive篇:explode 和 posexplode

一. explode单独使用。 1.1. 用于array类型的数据 table_name 表名array_col 为数组类型的字段new_col array_col被explode之后对应的列 select explode(array_col) as new_col from table_name1.2. 用于map类型的数据 由于map是kay-value结构的&#xff0c;所以它在转换的…

跨平台低延迟RTSP转RTMP推送技术方案探讨

实现RTSP摄像头数据转RTMP推送到服务器&#xff0c;可以用第三方库或者工具实现&#xff0c;总体设计架构如下&#xff1a; 一个好的转发模块&#xff0c;首先要低延迟&#xff01;其次足够稳定、灵活、有状态反馈机制、资源占用低&#xff0c;跨平台&#xff0c;最好以接口形式…