当前位置: 首页 > 面试题库 >

HashRouter与BrowserRouter

松昱
2023-03-14
问题内容

我是编程的新手,如果我阅读了官方文档,这会使我很难理解。

我从这里阅读有关React Router
4的内容

在这篇文章中,作者在谈论<HashRouter><BrowserRouter>

这就是他提到的

HashRouter 基本上使用URL中的哈希来呈现组件。由于我正在构建一个静态的单页网站,因此需要使用它。

BrowserRouter
,它使用HTML5历史记录API呈现组件。可以通过pushState和replaceState修改历史记录。更多信息可以在这里找到

现在,我都没有这两者的意义和用例,就像他所说的 可以通过pushState和replaceState修改历史记录*
使用URL中的哈希值来呈现组件 时所说的那样。
*

虽然对BrowserRouter的第一种解释对我来说完全是模糊的,但对HashRouter的第二种解释也没有意义,例如为什么有人在URL中使用哈希(#)来呈现组件


问题答案:

它使用历史记录API,即它不适用于旧版浏览器(IE
9及更低版本和同期版本)。客户端React应用程序能够维护干净的路由,例如 _example.com/react/route,
但是需要Web服务器的支持。通常,这意味着应该为单页应用程序配置Web服务器,即,index.html
/ react / route_
路径或服务器端的任何其他路由提供相同的服务。在客户端,window.location.pathname由React路由器解析。React
router渲染一个已配置为 / react / route 渲染的组件。

此外,设置可能涉及服务器端渲染,index.html可能包含特定于当前路线的渲染组件或数据。

HashRouter

它使用URL哈希,它对受支持的浏览器或Web服务器没有任何限制。服务器端路由独立于客户端路由。

向后兼容的单页应用程序可以将其用作 _example.com/#/react/route_ 。该设置不能通过服务器端呈现进行备份,因为它是服务器端提供的
/ 路径,因此无法从服务器端读取 #/ react / route
URL哈希。在客户端,window.location.hash由React路由器解析。与相似,React router会渲染一个已配置为 /
react / route
渲染的组件BrowserRouter

最重要的是,HashRouter用例不仅限于SPA。网站可能具有旧版或搜索引擎友好的服务器端路由,而React应用程序可能是在URL中维护其状态的小部件,例如
_example.com/server/side/route#/react/route_ 。与之前的场景类似,在服务器端 / server / side
/ route
会提供一些包含React应用程序的页面,然后在客户端React路由器会渲染一个已配置/ react / route 渲染的组件。



 类似资料:
  • 本文向大家介绍浅谈react-router HashRouter和BrowserRouter的使用,包括了浅谈react-router HashRouter和BrowserRouter的使用的使用技巧和注意事项,需要的朋友参考一下 官网推荐的是BrowserRouter,但是此方式需要服务器配合,而且有点不好的是重定向只能到首页,无法停留在当前页,具体用法很简单,举例说明。 HashRouter

  • 我是编程新手,如果我读官方文档,这让我有点难以理解。 我在这里读到反应路由器4 在本文中,作者讨论的是

  • 在C语言中,假设每个算法被赋予完全相同的一组进程,那么先到先得、最短作业优先和循环之间的周转时间是否相等?还是调度算法不同?

  • 问题内容: 为了为 HTML5 Doctype 定义字符集,我应该使用哪种表示法? 短: 长: 问题答案: 在HTML5中,它们是等效的。使用较短的一个,更容易记住和键入。浏览器支持很好,因为它是为向后兼容而设计的。

  • 连接的多个输入都相当于Yes的时候才会输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:今天15:10:00,响起猫叫声小闹钟 工作原理 当所有的输入都是Yes的时候,与节点才输出Yes。

  • 问题内容: 似乎有三种 相同的 方法可以独立于平台获取依赖于平台的“文件分隔符”: 我们如何决定何时使用哪个? 它们之间甚至有什么区别吗? 问题答案: 可以通过调用命令行参数或使用命令行参数覆盖 获取默认文件系统的分隔符。 获取默认文件系统。 获取文件系统的分隔符。请注意,作为一种实例方法,在需要代码在一个JVM中对多个文件系统进行操作的情况下,可以使用该方法将不同的文件系统传递给代码(而不是默认