深入理解 Vue3 Router:三种路由模式的工作原理与实战应用

引言

在 Vue 3 中,路由由 Vue Router 4 管理,支持三种模式:Hash 模式 、History 模式 和 Memory 模式 。

本文将详细介绍三种模式的实现原理、优缺点、使用场景,并对比它们的底层实现方法。


1. Hash 模式(createWebHashHistory)

创建方式

js 复制代码
import { createRouter, createWebHashHistory } from 'vue-router'

const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About }
  ]
})

URL 示例

复制代码
https://example.com/#/about

工作原理

  • 基于浏览器的 location.hash。
  • 通过监听 hashchange 事件来感知 URL 的变化。
  • # 后的部分不会被浏览器发送到服务器。

底层实现方法

  • location.hash = '#/about'
  • window.addEventListener('hashchange', callback)

优缺点

✅ 优点:

  • 不依赖后端配置,刷新不会 404。
  • 简单、快速。

❌ 缺点:

  • URL 不够美观(有 #)。
  • SEO 较差。

2. History 模式(createWebHistory)

创建方式

js 复制代码
import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About }
  ]
})

URL 示例

复制代码
https://example.com/about

工作原理

  • 基于 HTML5 History API。
  • 通过 pushState / replaceState 修改浏览器历史记录。
  • 监听 popstate 事件来感知返回/前进操作。

底层实现方法

js 复制代码
history.pushState({}, '', '/about') // 修改地址栏
window.addEventListener('popstate', callback) // 监听前进/后退

优缺点

✅ 优点:

  • URL 美观。
  • SEO 友好。

❌ 缺点:

  • 必须有后端支持,否则刷新可能会报 404。

Nginx 配置示例

nginx 复制代码
location / {
  try_files $uri $uri/ /index.html;
}

3. Memory 模式(createMemoryHistory,旧称 Abstract 模式)

创建方式

js 复制代码
import { createRouter, createMemoryHistory } from 'vue-router'

const router = createRouter({
  history: createMemoryHistory(),
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About }
  ]
})

URL 示例

复制代码
(不会改变地址栏,仍然是当前页面 URL)

工作原理

  • 路由信息只存储在 内存 中。
  • 不依赖 window.location,不会修改浏览器地址栏。

底层实现方法

  • 内部用一个 JS 对象来维护当前路由状态(模拟栈结构)。
  • 类似:
js 复制代码
let historyStack = []
historyStack.push('/about')

使用场景

  • SSR(服务端渲染):保证每个请求有独立的路由状态。
  • 单元测试:不需要浏览器地址栏。

优缺点

✅ 优点:

  • 可运行在 Node.js、JSDOM 等环境。
  • 不依赖浏览器 API。

❌ 缺点:

  • 地址栏不会变化。
  • 不适合浏览器端作为主要模式。

📌 三种模式对比

模式 API URL 示例 刷新依赖后端 底层实现方式 使用场景
Hash createWebHashHistory() /#/about ❌ location.hash + hashchange 中小项目
History createWebHistory() /about ✅ pushState / replaceState + popstate 中大型项目
Memory createMemoryHistory() (URL 不变) ❌ 内存栈结构(JS 对象维护路由状态) SSR / 测试

总结

  • Hash 模式 :依赖 location.hash,最简单,适合快速上线的项目。
  • History 模式 :依赖 pushState / replaceState,URL 美观,需后端支持,适合大型应用。
  • Memory 模式:依赖内存存储,主要用于 SSR 和测试,不会改变浏览器地址栏。
相关推荐
代码山河2 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
微订校园外卖平台3 小时前
校园外卖平台选模板还是定制:架构、数据流与验收清单
大数据·架构·外卖系统·本地生活·微订
ZhengEnCi5 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
Decay__6 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
华普微HOPERF8 小时前
Matter协议架构详解:数据模型与交互模型深度解析
microsoft·架构·交互
4SAPI10 小时前
多国产模型混合调度与企业级治理生产选型指南:4SAPI、硅基流动与 OpenRouter 的架构权衡
大数据·人工智能·架构·php
QAQmmttyyy11 小时前
FlyAgent 开发实录 ⑪|消息流即真相源
架构
FPGA小迷弟11 小时前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
OCR_1337162127511 小时前
从 “外设“ 到 “算力节点“:护照阅读器的轻上位机架构,正在改写集成范式
架构
第404号工位11 小时前
离职退电脑前别只点“清空回收站”!手把手教你彻底抹除凭证与数字痕迹
linux·python·架构