乐趣区

关于前端:浅谈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 两种路由的底层原理了。

退出移动版