浅谈前端路由原理,VueRouter原理和ReactRouter原理

要养成好习惯。

  • 先关注
  • 点赞
  • 收藏

再进行观看哦

简述

其实Vue和React在很多地方,底层原理和语法上差别并不是很大。底层原理更多的是相同的。就比如说React有JSX,Vue有Template。其实就可以理解成一个东西,就是写法不同。当然我们今天说的React的路由和Vue的路由也是一样。底层原理其实也差不多。

Hash模式(Vue/React)

其实前端路由真的简单谈谈原理的话并不难,hash模式是在地址后面拼接一个 # 号后面带有的路由地址。就类似于 a 标签的 锚点 。不过还有些不同,浏览器在地址栏改变的值是 hash 值时并不会触发浏览器请求。并且会触发一个事件 hashchange ,那么这样的话。我们就可以利用这个 haschange 进行搞事情了,可以通过 hashchange 去处理一些特殊的操作,执行一些情况下才会执行的代码。而 Vue / React 应用的正是这一原理。通过不同的 路由去调用不同的 函数/JS 去生成不同的页面代码。

举个例子:
这是一个hash模式的网址例子

http://www.xxx.com/#/abcd123  
function callBack(e) {
  // 通过event对象去获取当前的路由,来判断下一步要进行的一些操作,当然这里不止包含Dom,
  // 其他的操作也是可以的 
  console.log(e.oldURL)
  console.log(e.newURL)
}
window.addEventListener('hashchange',callBack)

目前hash模式支持最低版本是IE8,这也就是为什么都说hash模式的兼容性更好了。其实 ReactVue 的hash模式的路由底层就是这么简单的。

History模式(Vue/React)

接下来是History模式,History模式其实简单来说就是我们常见的那种带有path的地址。
例如:

http://www.xxxx.com/abc/dcde

但是这种模式会造成浏览器重新请求服务器路由,首先去获取服务器相应的path下的文件。若没有则会造成 404 Not Found! 当然这种形式需要服务端进行配合,将路由重新重定向到我们的打包出来的index.html文件上。
History模式其实很简单,就是ES6中的新增BOM对象History。VueReact 设计的也很巧妙,完美的使用了ES6的新增属性。

其实我们完全可以打印一下ES6新增的BOM对象History:


记得关注点赞收藏哦

熟悉Vue的同学可能发现了,proto里面包含了 go 方法, back 方法, 还有与Vue相似的 replaceState 方法, pushState 方法

没错, replaceStatepushState 其实就是vue中的 replacepush ,不过就是Vue的作者将其再进行了封装罢了。

History 存储历史记录是 队列存储 的,也可以理解为一个数组。他也是有 length 属性的。
我们平时操作 go(num) 其实调用的就是这个History队列里面的历史数据,并找到相应的索引进行一个跳转。

因为IE9才支持ES6,所以History模式并不支持IE9以下版本。
这也就是为什么我之前说Hash模式的兼容更好了。

这就是 VueReact 两种路由的底层原理了。

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):