从 React Router 谈谈路由的那些事

React Router 是专为 React 设计的路由解决方案,在使用 React 来开发 SPA (单页应用)项目时,都会须要路由功能,而 React Router 应该是目前使用率最高的。html

React Router 并非 Facebook 的 React 官方团队开发的,可是听说有官方人员参与开发。React Router 的设计思想来源于 Ember 的路由,若是原来有用过 Ember 的路由,那么应该对 React Router 不会陌生。前端

什么是路由?

对于没有开发事后端,也没有开发过 SPA 的前端来讲,「路由」这个名词可能会让人比较困惑,这里的路由并非指「硬件路由」,也不是网络七层协议中的「网络层路由」,可是其思想原理是同样的。我尽可能简单通俗的介绍一下。react

假如咱们有一台提供 Web 服务的服务器的网络地址是:10.0.0.1,而该 Web 服务又提供了三个可供用户访问的页面,其页面 URI 分别是:git

那么其路径就分别是 //about/concatgithub

当用户使用 http://10.0.0.1/about 来访问该页面时,Web 服务会接收到这个请求,而后会解析 URI 中的路径 /about,在 Web 服务的程序中,该路径对应着相应的处理逻辑,程序会把请求交给路径所对应的处理逻辑,这样就完成了一次「路由分发」,这个分发就是经过「路由」来完成的。后端

前端路由

前端的路由和后端的路由在实现技术上不同,可是原理都是同样的。在 HTML5 的 history API 出现以前,前端的路由都是经过 hash 来实现的,hash 能兼容低版本的浏览器。若是咱们把上面例子中提到的 3 个页面用 hash 来实现的话,它的 URI 规则中须要带上 #浏览器

 

http://10.0.0.1/
http://10.0.0.1/#/about
http://10.0.0.1/#/concat
 

Web 服务并不会解析 hash,也就是说 # 后的内容 Web 服务都会自动忽略,可是 JavaScript 是能够经过 window.location.hash 读取到的,读取到路径加以解析以后就能够响应不一样路径的逻辑处理。服务器

history 是 HTML5 才有的新 API,能够用来操做浏览器的 session history (会话历史)。基于 history 来实现的路由能够和最初的例子中提到的路径规则同样。网络

用户可能都察觉不到该访问地址是 Web 服务实现的路由仍是前端实现的路由。session

从性能和用户体验的层面来比较的话,后端路由每次访问一个新页面的时候都要向服务器发送请求,而后服务器再响应请求,这个过程确定会有延迟。而前端路由在访问一个新页面的时候仅仅是变换了一下路径而已,没有了网络延迟,对于用户体验来讲会有至关大的提高。

说了这么多的「路由基础」,该回头来讲说 React Router 了。

配置路由

使用 React Router 来配置上面例子中的三个页面,每一个页面分别对应着一个 React Component。

/about 页面的入口文件 about.js

 

相关文章
相关标签/搜索