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
  • 基于 **H5 history 路由: **
    • 改变 url 可以通过 history.pushState 和 resplaceState 等,会将 URL 压入堆栈,同时能够应用 history.go() 等 API
    • 监听 url 的变化可以通过自定义事件触发实现

react-router 实现的思想:

  • 基于 history来实现上述不同的客户端路由实现思想,并且能够保存历史记录等,磨平浏览器差异,上层无感知
  • 通过维护的列表,在每次 URL 发生变化的回收,通过配置的 路由路径,匹配到对应的 Component,并且 render。

2. 如何配置 React-Router 实现路由切换<

以上是关于React:react-router的hash模式和history模式的主要内容,如果未能解决你的问题,请参考以下文章

[react-router] react的路由和普通路由有什么区别?

react-router的原理

react后台管理系统路由方案及react-router原理解析

前端技能树,面试复习第 24 天—— React-Router 了解多少,说一说它的实现原理是什么

ZF_react react-router起步 React路由原理 简单实现Router Route createHashRouter createBrowserRouter。

React教程(十四) : React-router 实现原理