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

embedded/2024/10/18 10:37:31/

日期: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)联系

(2)区别

五、路由组件详解


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

(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.ppmy.cn/embedded/93431.html

相关文章

去除富文本框的边框

<style lang"scss" scoped>::v-deep .textareaDeep .el-textarea__inner {border: none !important;box-shadow: none !important;padding: 0px; }</style> //添加类名 <el-inputclass"textareaDeep"type"textarea":rows"…

Qt 实战(9)窗体 | 9.2、QDialog

文章目录 一、QDialog1、基本概念2、常用特性2.1、模态与非模态2.2、数据交互 3、总结 前言&#xff1a; Qt框架中的QDialog类是一个功能强大且灵活的对话框控件&#xff0c;广泛应用于各种GUI&#xff08;图形用户界面&#xff09;应用程序中&#xff0c;用于处理用户输入、消…

stm32程序调试方式(OLED显示屏调试以及Keil调试模式)

文章目录 前言一、调试的方式二、OLED显示屏调试2.1 OLED简介2.2 OLED硬件电路2.3 OLED驱动函数介绍2.4 OLED显示屏应用案例代码 三、Keil调试模式总结 前言 提示&#xff1a;本文主要用作在学习江协科大STM32入门教程后做的归纳总结笔记&#xff0c;旨在学习记录&#xff0c;…

认证鉴权系统的常用设计方案

认证鉴权系统是任何一个非纯资源访问型web网站所必须的能力(存在用户的概念)&#xff0c;用于管理用户资源访问权限和维护用户会话。针对不同的网站类型&#xff0c;需要采用不同的设计方案。 CookieSession 这种方案采取的是服务端保存会话信息&#xff0c;用户端保存用户会话…

TreeMap实现根据值比较

前言&#xff1a; TreeMap普通的排序方法都是根据键来比较来排序&#xff0c;本篇文章实现两种方式实现值排序 1.使用 SortedSet 和 Stream API 如果你想要一个持久化的排序结果&#xff0c;你可以使用 SortedSet 结构来存储键值对的条目。 TreeSet<Map.Entry<String, …

术之尽头:排序算法优化思考

引言 排序算法是人们研究的最多的一类计算机算法&#xff0c;也是计算机中最基础、使用频率最高的一类算法。虽然对排序算法的理论研究在目前看来被认为已经是最优解&#xff0c;但面对工业界各类问题&#xff0c;人们还是持续提出了针对特定场景的“更优”的算法。通过对排序…

Java8: Stream list.stream()之前进行判空

在Java 8中&#xff0c;使用Stream API可以非常方便地处理集合&#xff0c;但在使用list.stream()之前进行判空操作是一个好习惯&#xff0c;以避免NullPointerException。虽然Java 8本身没有直接提供一个非常简洁的单行代码来解决这个问题&#xff08;比如一个内置的空安全方法…

React性能之--如何避免组件重复渲染?

在react中&#xff0c;我们会发现存在组件会重复渲染&#xff0c;虽然说如果项目不大的话&#xff0c;这点影响不大&#xff0c;但是我们还是尽量避免组件渲染比较好&#xff0c;养成好习惯&#xff0c;尽可能让不管是大小项目&#xff0c;都让性能尽可能优化 。那我们如何避免…