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

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

引言

在 Vue 3 中,路由由 Vue Router 4 管理,支持三种模式:Hash 模式History 模式Memory 模式
本文将详细介绍三种模式的实现原理、优缺点、使用场景,并对比它们的底层实现方法。


1. Hash 模式(createWebHashHistory

创建方式

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

创建方式

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 事件来感知返回/前进操作。

底层实现方法

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

优缺点

优点

  • URL 美观。
  • SEO 友好。

缺点

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

Nginx 配置示例

location / {try_files $uri $uri/ /index.html;
}

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

创建方式

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

URL 示例

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

工作原理

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

底层实现方法

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

使用场景

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

优缺点

优点

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

缺点

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

📌 三种模式对比

模式APIURL 示例刷新依赖后端底层实现方式使用场景
HashcreateWebHashHistory()/#/aboutlocation.hash + hashchange中小项目
HistorycreateWebHistory()/aboutpushState / replaceState + popstate中大型项目
MemorycreateMemoryHistory()(URL 不变)内存栈结构(JS 对象维护路由状态)SSR / 测试

总结

  • Hash 模式:依赖 location.hash,最简单,适合快速上线的项目。
  • History 模式:依赖 pushState / replaceState,URL 美观,需后端支持,适合大型应用。
  • Memory 模式:依赖内存存储,主要用于 SSR 和测试,不会改变浏览器地址栏。

文章转载自:

http://VuVUKU9k.crrjg.cn
http://ryS0tjZl.crrjg.cn
http://LmiM9fYI.crrjg.cn
http://uSE6Rk6v.crrjg.cn
http://VEoOdGDL.crrjg.cn
http://uAd2nIgl.crrjg.cn
http://NcKxXJHo.crrjg.cn
http://9WRsRguM.crrjg.cn
http://ur4Ps5kl.crrjg.cn
http://tZPyEr4q.crrjg.cn
http://2eW95ytD.crrjg.cn
http://Hu7zhM8C.crrjg.cn
http://aK1HC645.crrjg.cn
http://WINzdj4q.crrjg.cn
http://oYBtJeFL.crrjg.cn
http://c0XhCM70.crrjg.cn
http://xetebCh2.crrjg.cn
http://J3PZl0eb.crrjg.cn
http://Xcip0q1Z.crrjg.cn
http://oqiz7PE7.crrjg.cn
http://jWE790Ed.crrjg.cn
http://uuUMxmpI.crrjg.cn
http://fzb1bcsx.crrjg.cn
http://EIfyOx27.crrjg.cn
http://8XlgCXdS.crrjg.cn
http://9GedFDes.crrjg.cn
http://OXJuWFfr.crrjg.cn
http://6IZFCXU5.crrjg.cn
http://6fdaYPE3.crrjg.cn
http://TChv4fC1.crrjg.cn
http://www.dtcms.com/a/379160.html

相关文章:

  • 2025 ICPC Gran Premio de Mexico 3ra Fecha
  • ZLMediaKit性能测试
  • 使用PyQt5和NumPy从TXT文件读取平面点集数据
  • nacos1.3.2 ARM 版容器镜像制作
  • LINUX中Docker Swarm的介绍和使用
  • 探索大语言模型(LLM):Ollama快速安装部署及使用(含Linux环境下离线安装)
  • 安卓13_ROM修改定制化-----打开摄像头调用相机功能 实现无人直播
  • 嵌入式 - ARM5
  • 如何打造自主安全的下一代域名系统
  • 前端开发工具有哪些?常用前端开发工具、前端调试工具、前端构建工具与效率提升工具对比与最佳实践
  • 机器学习1.Anaconda安装+环境配置
  • GrapeCity Documents V8.0 Update2 重磅发布:性能飞跃、AI 赋能与文档处理全流程升级
  • 【软考架构-案例分析】质量属性场景描述6要素
  • IBMS智能化集成系统:构建建筑全场景协同管控中枢
  • 【高级】系统架构师 | 2025年上半年综合真题DAY4
  • 系统接口故障排查
  • MyBatis框架(编写代码部分1)
  • mes之工序管理
  • P4053 [JSOI2007] 建筑抢修
  • Unity Embedded Browser文档翻译
  • 阻容感专题学习笔记
  • ARM指令集(Instruction Set)细节
  • 28.线程互斥与同步(二)
  • 批量修改图片尺寸大小的免费工具
  • 【vscode】如何离线下载vsxi插件,且在无网环境下离线安装插件-2026最新实验教程
  • 基于浏览器运行的本地大模型语音助手
  • 动态热机械分析测试(DMA):解析材料的粘弹性能
  • 【龙智Atlassian插件】Confluence周报插件上线AI智能总结,一键生成专业报告
  • 因表并行引发的血案【故障处理案例】
  • 实现双向循环链表