关于前端:浅谈Vue和React路由原理

要养成好习惯。

  • 先关注
  • 点赞
  • 珍藏

再进行观看哦

简述

其实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 两种路由的底层原理了。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理