前端路由原理

Published on with 0 views and 0 comments

前端路由实现的本质就是监听URL的变化,然后匹配路由规则显示相应的页面,实现方式有2种

  1. Hash模式
  2. History模式

Hash模式

可以通过 hashchange 事件来监听URL的变化

window.addEventListener('hashchange', e => {
  console.log(e.newURL, e.oldURL) // 新旧URL
})

History模式

History 模式主要使用 history.pushState 和 history.replaceState 改变 URL。

通过 History 模式改变 URL 同样不会引起页面的刷新,只会更新浏览器的历史记录。

// 新增历史记录
history.pushState(stateObject, title, URL)
// 替换当前历史记录
history.replaceState(stateObject, title, URL)
// 监听路由变化
window.addEventListener('popstate', e => {
  // e.state 就是 pushState(stateObject) 中的 stateObject
  console.log(e.state)
})

对比

  • Hash 模式只可以更改 # 后面的内容,History 模式可以通过 API 设置任意的同源 URL
  • History 模式可以通过 API 添加任意类型的数据到历史记录中,Hash 模式只能更改哈希值,也就是字符串
  • Hash 模式无需后端配置,并且兼容性好。History 模式在用户手动输入地址或者刷新页面的时候会发起 URL 请求,后端需要配置 index.html 页面用于匹配不到静态资源的时候

标题:前端路由原理
作者:lj0812
地址:https://blog.hereis.me/articles/2020/05/27/1590564479314.html