【vue3|第19期】vue3一般组件与路由组件的探讨

news2024/11/26 15:01:16

日期:2024年8月2日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006

说在最前面:本文 vue3 的示例代码,在没有另外声名的情况下,均采用 <script setup> 组合式代码风格,风格统一,避免混乱,请各位新老食客放心食用哈 ^ _ ^


文章目录

  • 一、前言
  • 二、一般组件(General Components)
    • (1)定义
    • (2)用途
    • (3)特点
  • 三、路由组件(Route Components)
    • (1)定义
    • (2)用途
    • (3)特点
  • 四、一般组件和路由组件联系与区别
    • (1)联系
    • (2)区别
  • 五、路由组件详解
    • (1)路由匹配
    • (2)组件切换(组件的动态加载)
    • (3)缓存与激活
    • (4)示例
  • 六、结语


在这里插入图片描述


一、前言


Vue.js 中,组件分为一般组件路由组件。一般组件是构成应用的基础,可以在不同的页面和功能中复用。而路由组件则与 Vue Router 紧密相关,主要用于定义和应用的路由结构,通过路由配置来控制组件的显示和隐藏。本文将探讨一般组件与路由组件的区别,并详细讲解路由组件的工作原理。

二、一般组件(General Components)


(1)定义

一般组件是 Vue 应用中最为常见的组件类型,它们不直接与路由相关联,而是作为页面或路由组件内部的功能单元被复用。一般组件可以在任何父组件的模板中被引用和使用,以实现更细粒度的功能划分和代码复用。如按钮、卡片、表单等。它们可以在多个地方被引用和使用,不直接与路由系统关联。

(2)用途

一般组件主要用于构建页面的一部分,提供可重用的界面元素。

(3)特点

  • 可以在任何 Vue 组件的模板中通过 <component-name /> 的形式被引用,并通过 props 接收数据。
  • 不被 Vue Router 管理,不直接参与路由跳转和匹配。
  • 生命周期钩子与 Vue 组件的生命周期相同。

三、路由组件(Route Components)


(1)定义

路由组件是 Vue应用中与 Vue Router 直接关联的组件,它们定义了应用中的页面和视图。每个路由对应一个组件,用于构建应用程序的不同页面或视图。当用户通过路由导航到不同的 URL 时,Vue Router 会根据路由配置渲染相应的路由组件。

(2)用途

路由组件用于定义应用中的各个页面,它们根据用户的导航行为动态加载和显示。

(3)特点

  • 直接与路由URL相关联,通过路由配置映射到具体的组件。
  • 可以通过路由参数和查询参数接收数据。
  • Vue Router 负责实例化和销毁。在路由跳转时,旧路由组件会被卸载(如果设置了 keep-alive 则可能不会被卸载),新路由组件会被挂载
  • 可以通过 Vue Router 提供的路由守卫(如beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave)来增强路由导航的控制能力。
  • 路由组件的生命周期与路由的导航过程紧密相关,例如,在路由进入前和离开后可以执行特定的逻辑。

四、一般组件和路由组件联系与区别


(1)联系

  • 无论是一般组件还是路由组件,都遵循 Vue3 的组件开发规范,拥有相似的组件结构和生命周期。
  • 一般组件能够在路由组件内部被引用和使用,共同构建出完整且丰富的页面功能。

(2)区别

  • 路由组件直接与路由 URL 关联,而一般组件则不直接参与路由匹配和跳转。
  • 路由组件在路由跳转时会经历卸载和挂载的过程,而一般组件的挂载和卸载通常由其父组件控制。
  • 路由组件可以利用 Vue Router 提供的路由守卫等功能,而一般组件则不具备这些特性。

五、路由组件详解


当用户在应用中点击导航栏进行路由跳转时,以下过程会发生:

(1)路由匹配

Vue Router 会根据用户点击的导航链接找到对应的路由配置。

(2)组件切换(组件的动态加载)

  • 原路由组件被卸载:如果当前路由有对应的组件实例,并且与新路由的组件不同,那么当前组件将经历 onBeforeUnmount()onUnmounted() 生命周期钩子,最终被销毁。
  • 新路由组件被挂载:1Vue Router1 将根据新的路由配置创建新组件的实例,并调用其onBeforeMount()onMounted()生命周期钩子,将组件挂载到DOM上。

(3)缓存与激活

如果使用 Vue Router<keep-alive>功能,路由组件在切换时不会被销毁,而是被缓存起来。在下次访问时,组件可以被快速重新激活,从而提高应用性能。

(4)示例

// router.ts
import { createRouter, createWebHistory } from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';
const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
];
const router = createRouter({
  history: createWebHistory(),
  routes,
});
export default router;

在这个例子中,HomeAbout是路由组件,它们分别与//about路径关联。

当我们在页面上点击导航栏进行路由切换时,原有的路由组件通常会被卸载,而新的路由组件则会被挂载

比如,当用户从 / 路由切换到 /about 路由时,/ 对应的路由组件(Home.vue)会依次经历组件的卸载生命周期钩子,如 onBeforeUnmount()onUnmounted() ,从而释放相关的资源。与此同时,/about 对应的路由组件(About.vue)会经历挂载的生命周期钩子,像 onBeforeMount()onMounted() ,进而完成组件的初始化以及渲染工作。

这样的机制设计能够显著提高应用的性能表现,避免不必要的资源占用,仅仅在需要的时候加载和展示相关的组件内容。

六、结语


总结来说,理解一般组件与路由组件的区别,以及掌握路由组件的工作原理,对于构建高效的单页面应用至关重要。而路由组件 Vue Router 的设计原理就是通过更改地址栏 URL 来动态地切换不同的模板内容,从而实现单页应用(SPA)的无刷新路由跳转。希望这篇文章能够帮助您更好地理解这些概念。


参考文章:

  • 《Vue Router》

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/140870449

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

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

相关文章

stm32cubemx生成驱动程序里面的变量,如何被main函数调用

用stm32cubemx生成了一个串口中断程序&#xff0c;功能实现了对不定长输入字符的统计和输出打印&#xff0c;在主函数写了回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 想重新排版&#xff0c;把回调函数放到UART.c里面&#xff0c; 考虑到main.c和uart…

使用Adobe Photoshop CS5给图片加水印

使用Adobe Photoshop CS5给图片加水印 前言1.我这里使用的是Adobe Photoshop CS52.新建空白画布3.写入水印内容4.按 Ctrl T 将其倾斜5.右键图层选择“混合选项”6.选择描边&#xff0c;颜色选择灰色7.效果如下8.填充选择0&#xff0c;不透明度选择75%9.打开编辑&#xff0c;选…

上海冷链配送新篇章 华鼎冷链科技以卓越服务餐饮品牌

在快速发展的上海餐饮连锁行业中&#xff0c;冷链运输作为保障食品安全与品质的关键环节&#xff0c;正迎来前所未有的发展机遇与挑战。华鼎冷链科技作为该领域的佼佼者&#xff0c;正引领着上海乃至全国冷链运输行业的新风尚。 华鼎冷链科技的成功并非一蹴而就。首先&#xff…

1990-2023年上市公司常用变量数据(1400+指标)

1990-2023年上市公司常用变量数据&#xff08;1400指标&#xff09; 1、时间&#xff1a;1990-2023年 2、范围&#xff1a;上市公司 3、格式&#xff1a;dta 4、来源&#xff1a;上市公司年报 5、指标&#xff1a;包括上市公司基本信息&#xff08;性质、行业、地址&#…

Linux智能控制器用于非标自动化印刷包装机械

科技的不断发展&#xff0c;印刷包装机械行业也在不断寻求创新和突破。Linux 智能控制器、非标自动化以及二次开发等技术的出现&#xff0c;为该行业的发展带来了新的机遇。本文将结合 BLIoTLink 协议软件&#xff0c;探讨这些技术如何加速印刷包装机械产业的升级。 Linux 智能…

C++STL专题 vector底层实现

目录 一&#xff0c; vector的手搓 1.构造函数 2. 拷贝构造的实现 3.析构函数 4.begin() end() 的实现 5.reserve的实现 6.size和capacity的实现 7.push_back的实现 8.pop_back的实现 9.empty的实现 10.insert的实现 11.erase的实现 12.resize的实现 13.clear的实…

Cadence23学习笔记(十七)

吴老师的网站里面有很多cadence的开源项目&#xff0c;可以用来学习&#xff1a; 全志 H3 SOC 官方参考设计 DD3 16bitX2 原理图及PCB – 吴川斌的博客 (mr-wu.cn) cadence设置显示实时的走线长度&#xff1a; 在allegro进行布线时可以实时显示当先布线的实际长度有助于pcb的…

Javascript——NaN有什么用法

简介 在 JavaScript 中&#xff0c;NaN&#xff08;Not a Number&#xff09;是一个特殊的值&#xff0c;用来表示非数字的结果&#xff0c;例如一个不合法的数学运算的结果。根据 IEEE 754 浮点数标准&#xff0c;NaN 不等于任何值&#xff0c;包括它自己。这意味着 NaN 是唯…

腾讯云服务器windows系统如何转linux系统

本人购买了腾讯云服务&#xff0c;进去后发现是windows系统的&#xff0c;有点郁闷&#xff08;使用不习惯&#xff09;&#xff0c;于是就去查查看看能不能将Windows系统转成linux系统&#xff0c;网上也有解决办法&#xff0c;但是貌似跟现在的腾讯云后台不一致&#xff0c;下…

dlid源码快速安装——百分百成功

前言 之前安装过一次dlib折腾了很久&#xff0c;最近子啊新的服务器上重新安装dlib这个包又遇到了一些问题&#xff0c;这里简单记录一下。 安装 我这里选择的是直接使用源码安装&#xff08;之前尝试过其他的安装方法&#xff0c;但是都失败了&#xff0c;索性这次就直接使用…

基于Java和Mysql的多人命题系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S架构、SSM框架 工具&#xff1a;Eclipse开发工具 系统展示 首页 管理员界面 教师管理界面 学生…

OZON热销文具产品,OZON文具有哪些热销品

OZON平台上的热销文具产品种类繁多&#xff0c;这些产品不仅满足了消费者在日常学习、办公中的需求&#xff0c;还体现了市场的趋势和消费者的偏好。以下是一些OZON平台上的热销文具产品及其特点&#xff1a; OZON热销文具产品地址&#xff1a;D。DDqbt。COm/74rD Top1 蓝色…

揭秘!结构健康自动化监测:高效精准,为何远超传统人工监测?

人工检测是依靠目测检查或借助于便携式仪器测量得到的信息&#xff0c;但是随着整个行业的发展&#xff0c;传统的人工检测方法已经不能满足检测需求&#xff0c;从人工检测到自动化监测已是必然趋势。 a. 从检测方式看 人工检测需要耗费大量的精力&#xff0c;从摆放检测工具到…

机器学习算法———深度学习(常见的结构)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

【wiki知识库】07.用户管理前端模块的添加-前端部分

&#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 目录 &#x1f34a; 编程有易不绕弯&#xff0c;成长之路不孤单&#xff01; 一、今日目标 二、前端部分的改造 2.1 修改the-header文件 2.2 用户展示/admin/user组件添加 2.2.1 /admin/user代码如下…

杂谈c语言——3.内存对齐

先看两个例子&#xff1a; typedef struct S {int a;double b;char c; }S;typedef struct B {int a;char b;double c; }B;int main() {printf("S : %d\n", sizeof(S));printf("B : %d\n", sizeof(B));return 0; } 结果为&#xff1a; S:24; B:16&#xff…

【Qt】项目代码

main.cpp文件 argc&#xff1a;命令行参数个数。*argv[ ]&#xff1a;每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序&#xff0c;一定需要QApplication对象。 widget w; 在创建项目的时候&#xff0c;勾选widg…

AI岗位平均月薪已经超过4.6万,程序员该如何抓住这个机遇?

前言 自从ChatGPT横空出世以来&#xff0c;市场上一直用“iPhone时刻”、“划时代”、“工业革命”等词汇来形容AI领域的飞速进展。如今&#xff0c;随着AI大模型的竞争日益激烈&#xff0c;这个领域正在以前所未有的速度向前发展。 AI大模型的革命性突破 OpenAI最新推出的G…

Linux--网络层IP

IP协议 IP协议&#xff0c;全称Internet Protocol&#xff08;互联网协议&#xff09;&#xff0c;是TCP/IP协议族中的核心协议之一&#xff0c;用于在互联网络上进行数据的传输。IP协议的主要功能是确保数据从一个网络节点&#xff08;如计算机、服务器、路由器等&#xff09…

【C++第11章】Vector

【C第11章】Vector vector介绍&#x1f9d0; vector是表示可变大小数组的序列容器&#xff0c;它类似于数组&#xff0c;但大小可以动态改变&#xff0c;并且大小会被容器自动处理。本质上说&#xff0c;vector使用动态分配数组来存储元素&#xff0c;为了减少扩容代价&#x…