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套精选项目源码

源码截图

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

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

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

相关文章

使用ffmpeg转换索尼老DV拍摄的VOB文件为mp4

一些背景故事 最近对象想用 CCD 拍照录像&#xff0c;家里刚好有一台快 20 年前的索尼 DV DCR-DVD653E&#xff0c;就是电池老化充不进去电了。 翻出来之后还感慨了一下&#xff1a;当年没有网购&#xff0c;价格不透明&#xff1b;有些地方也没有官方店&#xff0c;只有一两家…

Linux笔记之bash脚本中的-e、和

Linux笔记之bash脚本中的-e、&和&& code review! 文章目录 Linux笔记之bash脚本中的-e、&和&&1.&和&&2.-e 1.&和&& 在Linux bash脚本中&#xff0c;&符号有几个不同的用途&#xff0c;这里列举了一些常见的情况&#xf…

js中的内置对象、数学对象、日期对象、数组对象、字符串对象

js中的对象&#xff08;三种&#xff09;&#xff1a; 自定义对象 car、computer DOM对象 div、p BOM对象 window、console 内置对象 数学对象 Math &#xff08;object类型&#xff09; 1、圆周率 Math.PI 2、向下取整(返回值) Math.floor() 3、向上取整(返回值) M…

年少不知 Base 好,错把总包当成宝。。

今天聊一个很现实的话题&#xff1a;选 offer 对比薪资时&#xff0c;我强烈建议以 Base 为主&#xff0c;而不是总包。 为什么&#xff1f;且听鱼皮娓娓道来。 注意&#xff0c;以下为个人观点&#xff0c;仅供参考&#xff01; 首先明确 Base 和总包的概念&#xff1a; Base&…

某马头条——day11+day12

实时计算和定时计算 流式计算 kafkaStream 入门案例 导入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusions><exclusion><artifactId>connect-json</artifactId&…

美,英,法,德、意大利和西班牙的geojson,以及区域json

美&#xff0c;英&#xff0c;法&#xff0c;德、意大利和西班牙的geojson文件 json地址 https://pan.baidu.com/s/1nio1bV_j-jAEVqgEHXWsNw?pwdqwer#list/path/GEOJSON 感谢大佬提供的 大佬连接 大佬的知乎原地址 国内geojson获取工具地址 http://da![在这里插入图片描述](h…

【江科大】STM32:I2C通信外设(硬件)

在将2C通信外设之前&#xff0c;我们先捋一捋&#xff0c;串口的相关特点来和I2C进行一个对北比。 首先&#xff1a; 1,大部分单片机&#xff0c;设计的PCB板均带有串口通信的引脚&#xff08;也就是通信基本都借助硬件收发器来实现&#xff09; 2.对于串口的异步时序&#xff…

韩国访问学者申请注意事项

随着国际交流的增加&#xff0c;韩国成为许多学者追求学术深造的热门目的地之一。如果你计划成为一名韩国访问学者&#xff0c;以下是知识人网小编整理的一些需要注意的事项&#xff0c;以确保你的申请顺利进行。 1.详细了解目标学府&#xff1a;在开始申请之前&#xff0c;仔细…

Python进阶——文件及IO操作

一、文件的基本操作 创建文件对象和打开文件对象&#xff1a;open() def my_write():#(1)打开&#xff08;创建&#xff09;文件fileopen(Myqq.txt,w,encodingutf-8) #如果文件不存在&#xff0c;则在当前目录下创建一个文件名字为Myqq.txt#&#xff08;2&#xff09;操作文件f…

redis整合

一.redis的发布订阅 什么 是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 1、Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以…

matlab绘图杂谈-stem函数和plot函数

出发点 今天在论文中看到一副这样的图&#xff0c;它既有曲线&#xff0c;又有点&#xff0c;并且对两者都添加了图例。三条曲线应该是用plot函数绘制的&#xff0c;而target哪个绿色的圆圈&#xff0c;我的理解是用stem函数绘制的。它只是1个点&#xff0c;并且没有竖线&…

Linux文件管理技术实践

shell shell的种类(了解) shell是用于和Linux内核进行交互的一个程序&#xff0c;他的功能和window系统下的cmd是一样的。而且shell的种类也有很多常见的有c shell、bash shell、Korn shell等等。而本文就是使用Linux最常见的bash shell对Linux常见指令展开探讨。 内置shell…

ElasticSearch搜索引擎入门到精通

ES 是基于 Lucene 的全文检索引擎,它会对数据进行分词后保存索引,擅长管理大量的数据,相对于 MySQL 来说不擅长经常更新数据及关联查询。这篇文章就是为了进一步了解一下它,到底是如何做到这么高效的查询的。 在学习其他数据库的时候我们知道索引是一个数据库系统极其重要…

【基础配置】Python2/Python3并存安装配置教程

Nx01 产品简介 Python是一种高级的、解释型的、面向对象的通用编程语言&#xff0c;具有简单易学、代码可读性强、功能强大、可移植性好等特点。它可以应用于多种领域&#xff0c;如Web开发、数据科学、人工智能、机器学习、科学计算、自动化测试等。Python由Guido van Rossum于…

如何使用phpStudy软件测试本地PHP及环境搭建

各位同学朋友们大家好&#xff01;我是咕噜铁蛋&#xff01;我们经常需要在本地进行PHP代码的开发和测试。而phpStudy作为一个集成了Apache、MySQL和PHP的软件套装&#xff0c;提供了方便快捷的环境搭建和测试工具。今天铁蛋为大家详细介绍如何使用phpStudy来测试本地PHP及环境…

雨云服务器部署幻兽帕鲁PalWorld联机服务器详细教程

幻兽帕鲁是Pocketpair开发的一款开放世界生存制作游戏&#xff0c;游戏中&#xff0c;玩家可以在广阔的世界中收集神奇的生物“帕鲁”&#xff0c;派他们进行战斗、建造、做农活&#xff0c;工业生产等。 最近&#xff0c;这款游戏挺火&#xff0c;为了获得更好的游戏体验&…

Vue构建项目断点调试过程问题总结

Vue构建项目断点调试过程问题总结 问题背景 前端开发过程中&#xff0c;碰到问题时需要debug&#xff0c;快速分析和解决问题。一般除了console.log的方式打印日志外&#xff0c;更方便直观的方式就是打断点debug。本文对vue项目debug过程可能碰到的问题进行总结&#xff0c;…

“数据同步大揭秘:Canal工具如何让实时处理变得轻而易举?“

介绍&#xff1a;Canal是一个基于MySQL数据库增量日志解析的开源数据同步工具。 Canal的主要功能是提供增量数据订阅和消费&#xff0c;它通过解析MySQL数据库的增量日志来捕获数据变更事件&#xff0c;并将这些事件转换成数据变更流&#xff0c;供用户订阅和消费。这样&#x…

Deepin基本环境查看(四)【硬盘/分区、文件系统、硬连接/软连接】

Linux操作系统(Deepin、Ubuntu&#xff09;操作系统中&#xff0c;硬盘分区的管理与Windows操作系统不同&#xff1b; 在Linux系统中维护着一个统一的文件目录体系&#xff0c;而硬盘和分区是以资源的形式由操作系统挂接和调度&#xff1b;此外Linux系统中连接&#xff08;硬连…

NTFS 磁盘管理 :NTFS Disk by Omi NTFS

NTFS Disk by Omi NTFS是一款专为Mac系统设计的NTFS文件系统读写解决方案的工具。它可以帮助Mac用户方便地访问和管理NTFS格式的硬盘、U盘、移动硬盘以及其他存储设备&#xff0c;提供高效稳定的NTFS卷管理功能。 NTFS 磁盘管理 &#xff1a;NTFS Disk by Omi NTFS 该软件的主…