Vuerouter 的底层实现原理

文章目录

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

前言

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


🧩 Vue Router 底层实现核心原理

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

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

🧠 执行流程图(简化版)

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

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

① 路由注册与匹配(createRouterMatcher)

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

ts 复制代码
const matcher = createRouterMatcher(routes, options)

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

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

位置:packages/router/src/history/

ts 复制代码
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

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

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

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

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

⑤ 组件渲染机制(RouterView)

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

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

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

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

扩展:
VueRouter 看源码

相关推荐
এ慕ོ冬℘゜33 分钟前
使用 jQuery 动态渲染表格与状态切换
前端·javascript·jquery
Littlehero_12143 分钟前
QT自定义控件之热换站系统(源码开源)
开发语言·qt
meilindehuzi_a44 分钟前
Python 基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
caimouse1 小时前
ReactOS 窗口系统分析(5):可见区域与窗口 DC — vis.c + windc.c
c语言·开发语言
OPEN-F1 小时前
Python进阶教程:装饰器与生成器深入
开发语言·python
智购科技自动售货机厂家2 小时前
2026自动售货机AI视觉识别优化:从YOLOv11n模型量化到RKNN部署的端侧推理工程实践~YH
javascript·人工智能·yolo·机器学习·计算机视觉·目标跟踪·perl
晓说前端2 小时前
TypeScript 核心语法应用 —— Vue 3 中的使用(下)
前端·javascript·typescript·类型系统
千里码aicood2 小时前
基于Python的电商数据采集系统(大数据+爬虫)
开发语言·python
福大大架构师每日一题3 小时前
ragflow v0.27.0 发布:Go 后端全面对齐、智能体搜索与知识编译大升级,超全更新解析
开发语言·后端·golang
陈皮波比茶3 小时前
Python项目实战-网络机器人(爬虫)
开发语言·网络·爬虫·python·机器人