React:react-router的hash模式和history模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React:react-router的hash模式和history模式相关的知识,希望对你有一定的参考价值。
参考技术A window.onhashchange监听, Provider, Consumer = React.createContext()来传递,window.location对象中的属性,hash,state。该模式下:window.location.hash,页面只会加载对应的组件。
window.history API,只有点击前进回退按钮,或者api触发history.go(),history.goBack(),history.forward()可以触发window.onpopstate事件;该模式下使用window.location.pathname/window.location.href()修改路径(或者原路径),页面都会重新加载渲染。
该模式下:浏览器中触发前进、后退按钮页面不会重新加载,只会加载对应的组件。
即地址栏 URL 中的 # 符号(此 hash 不是密码学里的散列运算)。
比如这个 URL: http://www.aaa.com/#/hello,hash 的值为 #/hello。它的特点在于:hash 虽然出现在 URL 中,但不会被包括在 HTTP 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面。
利用了 html5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定浏览器支持)。
这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。只是当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求。
因此可以说,hash 模式和 history 模式都属于浏览器自身的特性,React-Router 只是利用了这两个特性(通过调用浏览器提供的接口)来实现前端路由。
参考文件: https://www.cnblogs.com/HappyYawen/p/14251578.html
前端技能树,面试复习第 24 天—— React-Router 了解多少,说一说它的实现原理是什么
1. React-Router 的实现原理是什么?
客户端路由实现的思想:
- 基于 hash 的路由:通过监听
hashchange
事件,感知 hash 的变化- 改变 hash 可以直接通过
location.hash=xxx
- 改变 hash 可以直接通过
- 基于 **H5 history 路由: **
- 改变 url 可以通过 history.pushState 和 resplaceState 等,会将 URL 压入堆栈,同时能够应用
history.go()
等 API - 监听 url 的变化可以通过自定义事件触发实现
- 改变 url 可以通过 history.pushState 和 resplaceState 等,会将 URL 压入堆栈,同时能够应用
react-router 实现的思想:
- 基于
history
库来实现上述不同的客户端路由实现思想,并且能够保存历史记录等,磨平浏览器差异,上层无感知 - 通过维护的列表,在每次 URL 发生变化的回收,通过配置的 路由路径,匹配到对应的 Component,并且 render。
2. 如何配置 React-Router 实现路由切换<
以上是关于React:react-router的hash模式和history模式的主要内容,如果未能解决你的问题,请参考以下文章
[react-router] react的路由和普通路由有什么区别?
react后台管理系统路由方案及react-router原理解析
前端技能树,面试复习第 24 天—— React-Router 了解多少,说一说它的实现原理是什么
ZF_react react-router起步 React路由原理 简单实现Router Route createHashRouter createBrowserRouter。