前端路由的诞生的缘由
90年代初,大多数网页都是通过直接返回HTML的,每次用户操作都需要刷新页面。及其影响交互,Ajax在这时候应运而生。
有了Ajax后,用户操作不用每次都刷新页面,体验带来了极大的提升。
而异步交互体验的更高级版本就是 SPA(Single Page Application)—— 单页应用。单页应用不仅仅是在页面交互是无刷新的,连页面跳转都是无刷新的,为了实现单页应用,所以就有了前端路由
路由实现
在2014年之前,大家是通过hash来实现路由的。
http:www.xxx.com/#/hash1
‘#’号后边的值变化,不会重新向服务器发送请求,所以就不会在刷新页面。
通过hashchange事件我们可以监听hash值的变化,使用JS来替换DOM。
在2014年之后,大家是通过hash来实现路由的。
14年后,因为HTML5标准发布。
多了两个 API,pushState 和 replaceState,
通过这两个 API 可以改变 url 地址且不会发送请求。
同时还有 onpopstate 事件。
通过这些就能用另一种方式来实现前端路由了,但原理都是跟 hash 实现相同的。
用了 HTML5 的实现,
单页路由的 url 就不会多出一个#,变得更加美观。
但因为没有 # 号,所以当用户刷新页面之类的操作时,浏览器还是会给服务器发送请求。
为了避免出现这种情况,
所以这个实现需要服务器的支持,需要把所有路由都重定向到根页面。