前端路由

hash

带#标志的路由,主要用于监听url中的hash变化来进行路由跳转
优势:兼容性更好

history

window.history.back() // 后退
window.histoty.forward() // 前进
window.history.go(-3) // 后退三个页面

history.pushState 用于在浏览历史中添加历史记录,并不触发跳转,接受三个参数
state:一个与指定网址相关的状态对象,popstate事件触发时,该对象会传入回调函数。不需要这个对象,可以填null
title:新页面的标题,但是一般忽略,填null
url:新网址,需与当前页面处于同一域。浏览器地址栏显示网址

history.replaceState的参数与pushState方法一样,区别是修改历史中的当前记录,非添加记录,同样不触发跳转
popState事件,当同一文档的浏览历史History对象改变时,触发popState事件
以上方法需要用户点击浏览器倒退或前进按钮,或使用JS调用back、forward、go等方法触发

应用场景:
通过 pushState 把页面的状态保存在 state 对象中,当页面的 url 再变回到这个 url 时,可以通过 event.state 取到这个 state 对象,从而可以对页面状态进行还原,如页面滚动条的位置、阅读进度、组件的开关等。
调用history.pushState() 比使用 hash 存在的优势:

  • pushState 设置的 url 可以是同源下的任意 url ;而 hash 只能修改 # 后面的部分,因此只能设置当前 url 同文档的 url
  • pushState 设置的新的 url 可以与当前 url 一样,这样也会把记录添加到栈中;hash 设置的新值不能与原来的一样,一样的值不会触发动作将记录添加到栈中
  • pushState 通过 stateObject 参数可以将任何数据类型添加到记录中;hash 只能添加短字符串
  • pushState 可以设置额外的 title 属性供后续使用

劣势:

  • history 在刷新页面时,如果服务器中没有相应的响应或资源,就会出现404。因此,如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面
  • hash 模式下,仅 # 之前的内容包含在 http 请求中,对后端来说,即使没有对路由做到全面覆盖,也不会报 404

参考资料:
掘金· 西芹儿:history与hash路由的区别
扩展:
基于History实现前端路由

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 通常 SPA 中前端路由有2种实现方式: window.history location.hash 下面就来介绍下...
    好奇男孩阅读 4,980评论 0 18
  • 一、什么是前端路由 在web开发的过程中,路由的使用是必不可少的,这里的路由不是指我们日常生活中的路由器,但是...
    Zeroacexy阅读 14,819评论 0 55
  • 路由 根据不同的url地址,展示不同的内容或页面。 前端路由 定义:在单页面应用,大部分页面结构不变,只改变部分内...
    焦迈奇阅读 4,626评论 1 3
  • 路由实现原理,就是根据不同的 url ,在页面上显示相应的内容。而浏览器 url 变化时,会造成页面的刷新。前端路...
    极客传阅读 1,553评论 0 1
  • 前情回顾:https://www.jianshu.com/p/bc0b5b239ed0 文/我们都在听 暗恋是一个...
    小可爱要炸甜阅读 1,738评论 0 2

友情链接更多精彩内容