从分析Vue实例生命周期开始,剖析Vue页面跳转背后执行过程

文章目录

    • 1.概要
    • 2.Vue实例生命周期
    • 3.生命周期函数解释
    • 4.存在父子组件情况页面执行过程
    • 5. 分析路由跳转页面执行过程
    • 6.扩展补充
    • 7.小结

1.概要

本文旨在分析Vue页面进行路由切换时,Vue背后的运行过程,旨在让大家更加清晰地明白Vue页面运行过程中钩子方法的执行顺序,有利于大家更高效地完成前端开发任务。

2.Vue实例生命周期

提示:这个Vue项目运行时会构建Vue实例,这个还不清楚的,需要自己补充Vue基础知识

在这里插入图片描述

Vue2和Vue3生命周期流程图

3.生命周期函数解释

下面以Vue3为例子进行解释,Vue3不仅包含Vue2对应生命周期函数,且额外新增了setup函数,运行在所有生命周期函数之前。

1.setup函数
Vue3新增的一个函数,相当于Vue2的beforeCreate和created钩子函数,由于Vue3是兼容Vue2写法,因此setup会在这两个钩子函数之前执行。通常在setup函数内部定义所有钩子函数以及初始化 js/ts 变量,具体行为在对应的钩子函数和自定义函数中。

2.OnBeforeMount函数
这个是DOM树尚未完成挂载至浏览器页面中,此时对DOM操作是无效的。因此不能在这个周期函数内操作DOM元素,会失效。

3.OnMounted函数
这个函数表明浏览器已经完成对DOM元素的挂载渲染了,此时可以拿到DOM元素并进行DOM操作,一般书写页面初次进入,挂载DOM树完成后所需要执行的DOM操作,都在这个钩子函数中。注意:页面刷新会触发挂载操作,但是组件刷新通常不会触发这个函数执行。

4.OnBeforeUpdate函数
这个就是单个页面某个部分刷新时触发的钩子函数,比如页面由3个组件合并而成,其中如果某一个组件状态发生变化,则会触发这个钩子函数。这个在页面组件更新前执行。

5.OnUpdated函数
这个和OnBeforeUpdate一起触发,这个是页面更新后 后置处理函数。

6.OnDeactivated、OnActivated函数
OnDeactivated组件失活触发钩子函数,OnActivated组件激活触发钩子函数

下面结合一个简单例子讲述,比如一个页面某个位置动态展示两个不同子界面,
并且需要对子界面进行缓存,即子界面动态切换时,仍然保留之前的数据状态,以使用keep-alive组件进行包裹。其中截图Child、Child2声明为两个子组件。
动态组件展示可以使用component 组件is 属性来判断切换组件。下图就是2个组件分别名称为Child,Child2,根据state变量值来动态渲染。

在这里插入图片描述

假设当前state从false状态变为true,此时先让Child2组件失活,在激活Child组件
先调用Child2组件的OnDeactivated函数,再调用Child组件OnActivated函数。

这个方法执行过程中,是在当前父组件OnBeforeUpdate 和 OnUpdated之间执行

7.OnBeforeUnmount/OnUnmounted函数
onBeforeUnmount‌组件开始卸载之前执行,OnUnmounted组件完全卸载后执行。
通常用于取消定时器、移除事件监听器等操作。
OnUnmounted组件完全卸载之后执行,通常用来重置状态、移除全局事件监听器等清理工作。这两个过程用以组件卸载时清理工作,有效书写可避免内存泄漏。

4.存在父子组件情况页面执行过程

之前生命周期是针对单个组件,默认没有父子组件情况下的执行流程。实际开发中,一个复杂的页面通常是多个组件合成一个view视图,并且组件内部可以嵌套组件,此时页面加载执行顺序是如何的呢?
下面以一个只包含2个子组件的父组件的执行流程来做个简要分析。刷新页面直接看截图效果。
.vue 文件【大家忽略其他属性信息】
在这里插入图片描述
其中在每个组件内钩子函数书写了函数对应的console.log()信息,执行截图如下。
在这里插入图片描述

  1. 执行流程分别是父组件 setup->beforeCreate->created->onbeforeMount
  2. 按照书写顺序依次加载Child组件 setup->beforeCreate->created->onbeforeMount
  3. 按照书写顺序依次加载Child2组件 setup->beforeCreate->created->onbeforeMount
  4. 依次挂载Child 、Child2 组件,最后挂载当前父组件。

5. 分析路由跳转页面执行过程

`
前面已经分析了单组件页面、带有父子组件页面执行逻辑,实际开发中,页面与页面之间切换大部分是通过路由跳转来实现的,当然window.open()例外。这个路由跳转过程中又触发了那些函数操作呢?

1.触发路由导航router.push()或者router.replace()方法或者是使用`标签,其中replace方法不会讲路由加入至路由history中。
2.在失活的组件内调用beforeRouteLeave 守卫
3.调用全局前置守卫beforeEach
4.重用组件调用beforeRouteUpdate守卫
5.调用路由配置的beforeEnter守卫
6.激活组件内调用beforeRouteEnter 守卫
7.调用全局后置守卫afterEach
8.DOM更新
9.调用beforeRouteEnter 传给next()方法回调函数,组件实例作为参数传递。

这里着重讲几个最常用的守卫。
全局前置守卫 beforeEach:通常用于请求拦截,token校验,比如用户登录或者是会员登录信息校验,可以放在这里进行校验。
针对单个路由组件进行额外的处理,使用beforeEnter或者beforeRouteEnter 守卫。
beforeRouteUpdate 用以一个通用组件,针对不同参数频繁渲染的组件的钩子函数。

next()放行函数,为空表示啥也不做,这里书写具体的逻辑,是直接放行还是重定向还是返回错误信息等,都是使用next()钩子函数来完成,常见 next({path:'/home'}) 表示路由重定向/home路由 next(false) 表示中断路由导航

6.扩展补充

Vue3虽然兼容Vue2,但为了代码可读性、扩展性、可维护性,建议尽量不要混合使用,Vue3钩子函数需要放到setup函数中,且一个Vue文件最多只能有一个setup。混合使用过程中,Vue2方法可以访问setup内部对象,但是setup无法获取Vue2的对象。

Vue3是Vue2的升级版,性能得到极大提升,打包体积减少41%,初次渲染快55%,内存减少54%,相比Vue2开发更加高效,运行速度更快。适用于新项目开发。但目前兼容性不如Vue2,所以老项目依旧采用Vue2进行开发维护。

Vue3与Vue2最大的不同点在于:
Vue3引入了组合式API和函数式编程,更加高效实现数据响应式。
Vue3采用Proxy代理实现数据响应式,Vue2采用defineProperty实现数据响应式。Vue3代理方式解决了某些情况下Vue2数据更新页面未同步更新的问题。比如一个数组通过下标修改数据,Vue2语法下绑定该数组的对象页面不会自动更新,需要额外手动设置this.$set/Vue.set触发更新。

7.小结

本问旨在分析Vue3情况下页面切换下整个Vue文件执行过程,最后结尾补充了Vue3和Vue2做了个简单的对比。希望能给大家带来一点帮助,文中书写如有错误,请于评论中交流指正。

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

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

相关文章

SAP固定资产报废BAPI_ASSET_RETIREMENT_POST的主要参数说明<转载>

原文链接:https://mp.weixin.qq.com/s/bzuK0PUfY7Zb-AoAIeWKiQ SAP固定资产的报废在前台通过tcode ABAVN执行相关业务的操作。 比如如下操作。 事务类型:选择如下,可以根据实际要求选择 填写完成必填相关参数后,最后点击保存即可…

鸿蒙基本组件结构

组件结构 1. 认识基本的组件结构 ArkTS通过装饰器Component 和Entry 装饰 struct 关键字声明的数据结构,构成一个自定义组件 自定义组件中提供了一个build函数,开发者需要在函数内以链式调用的方式进行基本的UI描述,UI描述的方法请参考UI描述…

北航软件算法C4--贪心部分

C4 【写在前面】贪心の食客步骤注意完整代码tip 算法练习赛步骤完整代码 Jade Star步骤完整代码 切钢条步骤tip完整代码【写在后面】 【写在前面】 这学期一直没怎么有时间写blog,一直在赶各种上机和大作业,但是写博客确实能很好的巩固基础,…

Stable Diffusion Web UI 1.9.4常用插件扩展-WD14-tagger

Stable Diffusion Web UI 1.9.4 运行在 WSL 中的 Docker 容器中 tagger 插件的作用是,上传一张图片,反推这张图片可能的提示词。 使用场景就是,想要得到类似的图片内容时使用。 WD14-tagger 安装 Stable Diffusion WebUI WD14-tagger GitH…

如何选择适合的AWS EC2实例类型

在云计算的世界中,Amazon Web Services(AWS)提供了丰富的服务,其中Elastic Compute Cloud(EC2)是最受欢迎的服务之一。选择合适的EC2实例类型对于确保应用程序的性能和成本效益至关重要。我们九河云通过本文…

高效数据集成:聚水潭与金蝶云星空无缝对接的实现

聚水潭数据集成到金蝶云星空:无信息件线上销售退货对接其他入库ok 在企业的日常运营中,数据的高效流转和精准处理至关重要。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将聚水潭的数据无缝对接到金蝶云星空&#xf…

电话语音机器人,是由哪些功能构成?

电话语音机器人是自动电话销售、筛选意向客户的,只要录入好行业话术,导入要拨打的手机号,机器人就可以上岗工作了。 电话语音机器人组成部分: 1、语音识别器,主要作用:识别客户讲话内容,从而做…

捆绑推荐综述:方法、应用与挑战

近年来,捆绑推荐系统因其能够通过推荐一组物品(而非单个物品)来提升用户体验并增加销售额,而在学术界和工业界受到了广泛关注。本综述对捆绑推荐进行了全面回顾,首先提出了一种用于探索产品捆绑的分类方法。我们根据不…

【环境搭建】Apache DolphinScheduler 2.0.5

安装 Docker 和 Docker Compose(已经安装可以跳过) 首先,确保你的 Ubuntu 系统是更新过的,可以使用以下命令更新软件包列表: sudo apt-get update 安装 Docker,运行以下命令: sudo apt-get in…

网站架构知识之Ansible(day020)

1.Ansible架构 Inventory 主机清单:被管理主机的ip列表,分类 ad-hoc模式: 命令行批量管理(使用ans模块),临时任务 playbook 剧本模式: 类似于把操作写出脚本,可以重复运行这个脚本 2.修改配置 配置文件:/etc/ansible/ansible.cfg 修改配置文件关闭主机Host_key…

【系统架构设计师(第2版)】七、系统架构设计基础知识

有效的软件体系结构及其明确的描述和设计,已成为软件工程领域中重要的主题。 *注:由于历史原因,研究者和工程人员对**Software Architecture(简称SA)*的翻译不尽相同,本文中软件“体系结构”和“架构”具有…

人工智能之人脸识别(人脸采集人脸识别)

文章目录 前言PySimpleGUI 库1-布局和窗口2 文本框组件3-视频处理图片处理数据库操作数据采集(重要部分)人脸识别(综合部分) 前言 例如:随着人工智能的不断发展,本文主要介绍关于人工智能中GUI和PyMysql相…

深入浅出 Spring Boot 与 Shiro:构建安全认证与权限管理框架

一、Shiro框架概念 (一)Shiro框架概念 1.概念: Shiro是apache旗下一个开源安全框架,它对软件系统中的安全认证相关功能进行了封装,实现了用户身份认证,权限授权、加密、会话管理等功能,组成一…

【JAVA】java 企业微信信息推送

前言 JAVA中 将信息 推送到企业微信 // 企微消息推送messageprivate String getMessage(String name, String problemType, String pushResults, Long orderId,java.util.Date submitTime, java.util.Date payTime) {String message "对接方&#xff1a;<font color\…

AI代币是什么?AI与Web3结合的未来方向在哪里?

近两年随着人工智能的崛起&#xff0c;AI已经渗透到制造业、电商、广告、医药等各个行业&#xff0c;加密货币领域也不例外&#xff0c;人工智能与区块链的融合&#xff0c;让我们看到了独特的数字资产 — AI加密代币。 它的流行始于2022年底&#xff0c;随着OpenAI智能聊天机…

MySQL数据库中的视图

视图 ​ 本篇将开始介绍有关数据库中视图的相关知识点&#xff0c;其中主要包含视图的基本使用&#xff0c;视图规则和限制。 ​ 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据&#xff0c;视图的数据变化会…

Linux基础(八):EXT与XFS文件系统简介

磁盘与文件系统管理 1.文件系统与分区2. inode、block和superblock3.EXT2的文件系统3.1 data block3.2 inode Table3.2.1 inode记录的内容3.2.2 inode特点 3.3 Superblock3.4 Filesystem Description(文件系统描述说明)3.5 block bitmap &#xff08; 区块对照表&#xff09;3.…

clion远程配置docker ros2

CLION与docker中的ROS2环境构建远程连接 设备前提开启SSH服务CLION配置CLION配置CLION IDE远程连接过程实现CLION SSH 远程部署 开启fastlio2debug之旅 设备前提 本地宿主机&#xff1a;UBUNTU 20.04 docker container:ros2_container (内置环境ROS2 humble) 通过之前的tcp连接…

Midjourney从入门到精通教程,10分钟让你从小白变大神!【珍藏版】

前言&#xff1a; 《Midjourney使用教程&#xff1a;从入门到精通》旨在带领你一步步掌握这款强大的AI创作工具。无论你是设计小白还是有一定基础的创作者&#xff0c;本教程都将为你揭开Midjourney的神秘面纱。从基本操作到高级技巧&#xff0c;我们将逐一解析&#xff0c;让…

JAVA开源项目 网上租赁系统 计算机毕业设计

本文项目编号 T 050 &#xff0c;文末自助获取源码 \color{red}{T050&#xff0c;文末自助获取源码} T050&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计5.4.1 用…