技术文摘
Vue 中 hash 与 history 的原理及区别
Vue 中 hash 与 history 的原理及区别
在 Vue 开发中,路由是实现单页面应用(SPA)多视图切换的关键机制,而 hash 模式和 history 模式是 Vue Router 提供的两种重要路由模式。深入了解它们的原理及区别,有助于开发者根据项目需求做出更合适的选择。
hash 模式原理
hash 模式的核心在于 URL 中的 hash 值(即 # 符号后面的部分)。浏览器监听 hashchange 事件,当 hash 值发生变化时,并不会向服务器发送请求,而是触发相应的回调函数。Vue Router 利用这一特性,监听 hashchange 事件,根据不同的 hash 值来渲染对应的组件。例如,当 URL 从 example.com/#/home 变为 example.com/#/about,hashchange 事件触发,Vue Router 识别到新的 hash 值 /about,并渲染关于页面的组件。
history 模式原理
history 模式借助 HTML5 的 History API,主要使用 pushState 和 replaceState 方法来改变浏览器的历史记录,同时不会触发页面刷新。当调用 router.push('/new-page') 时,Vue Router 使用 pushState 将新的路径添加到历史记录中,浏览器地址栏更新,但页面不会重新加载。服务器端需要对 history 模式进行特殊配置,因为不像 hash 模式那样,浏览器不会忽略路径直接请求根目录,服务器需要正确处理所有可能的路由请求,避免出现 404 错误。
两者区别
- URL 表现:hash 模式的 URL 中带有
#符号,不够美观,例如example.com/#/user;而 history 模式的 URL 更加简洁自然,如example.com/user。 - 兼容性:hash 模式兼容性较好,支持所有主流浏览器;history 模式依赖 HTML5 的 History API,对于不支持的旧浏览器无法使用。
- 服务器配置:hash 模式不需要服务器特殊配置,因为 hash 值的变化不会向服务器发起请求;history 模式需要服务器端进行配置,以确保正确处理路由请求。
在实际开发中,若项目对 URL 美观度要求较高,且目标浏览器都支持 HTML5,可选择 history 模式;若需要兼容旧浏览器或对服务器配置有困难,hash 模式则是更合适的选择。
TAGS: vue路由模式 hash原理 history原理 hash与history区别
- C++ 即将迎来重大更新:C++20 的四大新特性解读
- 美国程序员工资颇高,身为程序员的你处于何种水平?
- 11 款出色的 Python 编译器及解释器
- Springboot 服务优雅停止的多种方式
- 学习 Go 语言的利弊之经验分享
- 利用 Django 编写 Python Web API 的方法
- STM32 单片机 I/O 八种工作模式深度解析
- 一行 Python 代码实现图像文本读取
- 这几道 JavaScript 面试题(上),助你与考官应答自如
- 2020 年,这 7 门现代编程语言你或许该了解,哪家更强?
- Java 程序员必知的基础:内部类剖析
- 2019 年 Java 类库排名 Top 100:基于 30073 份源码的分析结论
- 微博为自家 CEO 加“头发特效” 引网友调侃:来去之间变莱芝简
- 腾讯在万亿级日志量中,ES 怎样实现秒级响应?
- 退休程序员以高中几何法使百年数学难题接近理论极限