前言:网络上,不少介绍前端路由实现的文章,以及路由原理的文章。可是最近在面试过程当中,我发现,全部面试者都能讲清楚路由的技术实现,可是却对每一种技术实现的适用场景不理解。好比
hash
路由,不少人的回答是hash
路由会带有一个#
号很差看,因此用了history
路由。甚至我出去面试的时候,也有一些面试官这么认为(T_T)。任何技术方案的产生都是为了解决某些特定问题的。hash
和history
也不例外。html
hash
:多是大多数人了解的模式,主要是基于锚点的原理实现。简单易用browser
:即便用html5
标准中的history api
经过监听popstate
事件来对dom
进行操做。每次路由变化都会引发重定向memory
:这种实现是在内存中维护一个堆栈用于管理访问历史的方式,比较复杂。在早起移动端使用比较多。实现麻烦,问题也较多。如今不多有使用。RN
在使用这种路由模式static
:主要用于ssr
。须要后端去管理路由query
传参优势前端
ie8
)hash
的路由实现ajax
请求之外,不会发起其余请求缺点html5
hash
部份内容,致使后台没法取得url
中的数据,典型的例子就是微信公众号的oauth
验证优势react
url
中的参数。后端能够拿到这部分数据browser
的路由实现history.state
来获取当前url
对应的状态信息缺点android
hash
路由(只兼容到IE10
)html
文档优势面试
缺点ajax
memory
路由的实现(react-router
提供了memory
实现)android
设备的backbutton
static
路由 优缺点(该路由方式主要用于ssr
。不作比较。)hash模式适用场景:后端
oauth
)hybrid app
须要将前端资源打包在应用内,由于html
的域在file://
下,因此不能发生重定向history模式适用场景:api
history.state
)获取路由状态memory模式适用场景:前端框架