前端路由hash与history小记

125 阅读2分钟

前言

在前端,无论是vue还是react项目,在项目中的路由选择目前一般只有两种:hash和history 因为本人目前主要也是vue技术栈,所以以下例子都是基于vue场景

vue适用于构建单页面应用(SPA),而单页面应用是基于路由和组件的,路由访问不同路径,路径映射不同组件。(SSR打开新页面)

单页面应用只有一个完整页面,它在第一次加载页面时就将唯一完整的html页面和所有其余页面组件一起下载下来,切换页面时不会加载整个页面,而是只更新某个指定容器的内容。(更新视图不重新请求页面)

路由器底层实现三大步骤

  1. 监听地址栏变化
  2. 查找当前路径对应的页面组件
  3. 将找到的页面组件替换到router-view

Hash和History

vue-router提供两种方式来实现前端路由:Hash模式和History模式(默认Hash)

Hash模式:
  • url带#,#符号以及后面的字符就是hash,可以通过window.location.hash属性读取
  • url变化后根据hash的改变来更新页面和数据,每次改变hash都会在浏览器访问历史中增加一个记录,使用浏览器后退按钮可以返回
  • hash不会被包括在http请求中,它是用来指导浏览器动作的,对服务端完全无用,所以改变hash不会重新加载页面
History模式:
  • 利用HTML5 History Interface中新增的pushState()和replaceState()方法
  • 在以上两个方法已有的back、forward、go基础上,提供了对历史记录进行修改的功能,不过执行修改虽然改变url,但不会立刻向后端发送请求
  • 路由跳转不会重新加载页面
  • 不带#看起来比较优雅
  • 兼容性没hsh好