前端怎么控制管理路由?(网易)
前端路由的实现方式:
- hash
- 基于hash展示层面,也就是切换#后面的内容,呈现给用户不同的页面。现在越来越多的单页面应用,基本都是基于hash实现
- 特性:url中的hash值的变化并不会重新加载页面,hash值的改变,都会在浏览器的访问历史中增加一个记录,也就是能通过浏览器的回退、前进按钮控制hash的切换
- 我们可以通过hashchange事件,监听到hash值的变化,从而响应不同路径的逻辑处理。
- 基于hostory新API(history.pushState() + popState事件)
- window.history.pushState(null, null, ‘http://www.google.com‘);
这两个API的相同之处是都会操作浏览器的历史记录,而不会引起页面的刷新。不同之处在于,pushState会增加一条新的历史记录,而replaceState则会替换当前的记录
:::info 说一说 HashRouter 和 HistoryRouter的区别和原理? ::: 一、原理:
- HashRouter的原理:通过window.onhashchange方法获取新URL中hash值,再做进一步处理
- HistoryRouter的原理:通过history.pushState 使用它做页面跳转不会触发页面刷新,使用window.onpopstate 监听浏览器的前进和后退,再做其他处理
二、HashRouter和 HistoryRouter的区别:
1. history和hash都是利用浏览器的两种特性实现前端路由,history是利用浏览历史记录栈的API实现,hash是监听location对象hash值变化事件来实现
2. history的url没有’#’号,hash反之
3. 相同的url,history会触发添加到浏览器历史记录栈中,hash不会触发,history需要后端配合,如果后端不配合刷新新页面会出现404,hash不需要。
4、hash模式下url会带有#,需要url更优雅时,可以使用history模式。
5、需要兼容低版本的浏览器时,建议使用hash模式。
6、需要添加任意类型数据到记录时,可以使用history模式。
:::info
前端路由是为了解决什么问题而出现的?
:::
前端路由的出现要从 ajax 开始,有了 Ajax 后,用户交互就不用每次都刷新页面,体验带来了极大的提升。随着技术的发展,简单的异步已经不能满足需求,所以异步的更高级体验出现了——SPA(单页应用)。 SPA 的出现大大提高了 WEB 应用的交互体验。在与用户的交互过程中,不再需要重新刷新页面,获取数据也是通过 Ajax 异步获取,页面显示变的更加流畅。 但由于 SPA 中用户的交互是通过 JS 改变 HTML 内容来实现的,页面本身的 url 并没有变化,这导致了两个问题:
• SPA 无法记住用户的操作记录,无论是刷新、前进还是后退,都无法展示用户真实的期望内容。
• SPA 中虽然由于业务的不同会有多种页面展示形式,但只有一个 url,对 SEO 不友好,不方便搜索引擎进行收录。
前端路由就是为了解决上述问题而出现