当前位置: 首页 > java >正文

Vuerouter 的底层实现原理

文章目录

  • 前言
    • 🧩 Vue Router 底层实现核心原理
    • 🧠 执行流程图(简化版)
    • 🔍 核心模块源码原理(简要)
      • ① 路由注册与匹配(createRouterMatcher)
      • ② 历史模式管理器(createWebHistory / createWebHashHistory)
      • ③ 导航守卫系统(beforeEach、beforeEnter、beforeRouteLeave)
      • ④ 响应式路由状态(useRoute / useRouter)
      • ⑤ 组件渲染机制(RouterView)
    • ✅ 总结:Vue Router 是如何运行的?


前言

Vue Router(Vue 3 官方路由库)的底层实现,主要围绕以下几个核心模块进行设计与运行:


🧩 Vue Router 底层实现核心原理

Vue Router 的核心可以拆解为以下 5 个模块

模块功能描述
① 路由注册系统(Matcher)负责根据配置生成路由表并进行路径匹配
② 历史管理器(History)控制浏览器地址栏变化,支持 hashhistorymemory 模式
③ 路由导航守卫系统控制路由进入、离开逻辑(如权限控制)
④ 响应式状态管理当前路由、路由参数等响应式跟踪
⑤ 路由组件渲染系统<RouterView> / <RouterLink> 实现组件显示

在这里插入图片描述

🧠 执行流程图(简化版)

用户点击/编程导航↓触发 router.push()↓➤ 调用 matcher.resolve() 匹配路由↓➤ 运行导航守卫(全局/路由/组件)↓➤ 成功后 history.pushState() 或 location.hash 更新地址↓➤ 响应式更新 currentRoute,RouterView 渲染组件

🔍 核心模块源码原理(简要)

① 路由注册与匹配(createRouterMatcher)

位置:packages/router/src/matcher/index.ts

const matcher = createRouterMatcher(routes, options)matcher.resolve(location) // 根据路径解析出 RouteRecord
  • 解析用户传入的 routes 配置为 路由树
  • 支持动态参数、嵌套路由、通配符等。

② 历史模式管理器(createWebHistory / createWebHashHistory)

位置:packages/router/src/history/

const history = createWebHistory()history.push('/home')   // 使用 window.history API
history.listen(callback) // 监听 popstate 事件
  • hash 模式:监听 hashchange,地址形如 /#/home
  • history 模式:监听 popstate,使用 pushState/replaceState
  • memory 模式:主要用于 SSR 或测试环境

③ 导航守卫系统(beforeEach、beforeEnter、beforeRouteLeave)

位置:packages/router/src/navigationGuards.ts

router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !auth.isLoggedIn()) {return '/login'}next()
})
  • 支持异步、Promise、next() 控制
  • 包括全局守卫、路由守卫、组件守卫

④ 响应式路由状态(useRoute / useRouter)

内部使用 shallowRef(currentRoute) 维护状态:

const currentRoute = shallowRef(...)
  • 每次路由跳转,都会更新 currentRoute
  • <RouterView> 和组件通过依赖追踪自动刷新页面视图

⑤ 组件渲染机制(RouterView)

位置:packages/router/src/components/RouterView.ts

<RouterView /> 根据当前 route 渲染匹配的组件
  • 支持嵌套视图、命名视图、keep-alive 等
  • 本质是根据路由记录动态切换组件

✅ 总结:Vue Router 是如何运行的?

环节原理
注册创建 matcher 匹配器,解析 routes 配置
导航调用 router.push,修改地址栏,更新 currentRoute

扩展:
VueRouter 看源码

http://www.xdnf.cn/news/4478.html

相关文章:

  • 【机器学习】Logistic 回归
  • 藏文助词标注器入门实践
  • SQLite数据库加密(Java语言、python语言)
  • 第8章-1 查询性能优化-优化数据访问
  • 微信小程序预览文件 兼容性苹果
  • redis bitmap数据类型调研
  • TB6600HG是一款PWM(脉宽调制)斩波型单芯片双极性正弦波微步进电机驱动集成电路。
  • 三款实用工具推荐:配音软件+Windows暂停更新+音视频下载!
  • ZYNQ移植FreeRTOS与OpenAMP双核开发实践指南
  • 《汽车噪声控制》复习重点
  • AI开发playwright tool提示词
  • 信奥赛CSP-J复赛集训(图和树专题)(1):P8604 [蓝桥杯 2013 国 C] 危险系数
  • 蓝桥杯 20. 倍数问题
  • 传输层协议 1.TCP 2.UDP
  • 碰一碰发视频源码搭建的技术迭代与升级实践
  • 16.Excel:数据收集
  • cuda矩阵加法
  • 【解决】VsCode C++异常【terminate called after throwing an instance of ‘char const‘】
  • STM32的网络天气时钟项目
  • 【AI提示词】双系统理论专家
  • 在IDEA中编写Spark程序并运行
  • 深入解析Http11AprProtocol:Tomcat高性能通信的底层原理
  • MySQL OCP和Oracle OCP怎么选?
  • daplink开发_一次开发DAPLink的详细开发流程及调试步骤
  • 多线服务器具有什么优势
  • 5月7日星期三今日早报简报微语报早读
  • python爬虫爬取网站图片出现403解决方法【仅供学习使用】
  • vue3+ts的computed属性怎么用?
  • yarn的概述
  • 【MATLAB源码-第277期】基于matlab的AF中继系统仿真,AF和直传误码率对比、不同中继位置误码率对比、信道容量、中继功率分配以及终端概率。