react router中的hashHistory和browserHistory有什么区别?

IT技术 javascript reactjs react-router
2021-04-18 11:42:12

我在谷歌上搜索了很多,但我没有找到以下问题的明确答案:react-router 中的 hashHistory 和 browserHistory 之间有什么区别?

4个回答

基本区别在于 hashHistory 使用的 URL 如下:http ://myurl.com/#page/another_page/another_page

使用 BrowserHistory,您可以获得正常的网址(无哈希):http : //myurl.com/page/another_page/another_page

browserHistory 可以用于保留浏览器链接锚点能力吗?我已经在我的路由器github.com/ReactTraining/react-router/issues/...上尝试过这种方法,并且每次点击锚点时都会重新渲染视图
2021-05-31 11:42:12
太棒了,这个小答案让我很高兴,很清楚也很明显,但React-Router不幸的是,在第 4 版中我们无法使用它们。
2021-06-04 11:42:12
这个 hashHistory Url 有什么好处或缺点(如果有的话)?
2021-06-12 11:42:12
看看这个帖子。我认为这就是您要查找的内容:stackoverflow.com/a/40280486/217187但它出现的答案是肯定的。
2021-06-14 11:42:12
哈希历史也适用于传统浏览器npmjs.com/package/react-history
2021-06-14 11:42:12

第一个区别:

他们使用不同的 WEB API。 <HashRouter>使用并从 URL 读取哈希, <BrowserRouter>使用window.historyWEB API。

第二个区别:

<HashRouter>用于静态单页网站。非常适合基于浏览器的项目。 <BrowserRouter>用于动态网站。当您拥有处理动态请求的服务器(知道如何响应任何可能的 URL)时应使用。

我认为问题不是要求格式上的差异,而是技术上的差异。因此在这里分享这个有技术差异的答案:https : //stackoverflow.com/a/42157741/2445694

基本上浏览器不会在 # 之后发送 url

所以假设一个网站限制了成员和管理员的区域。用户导航到 /member,并被提示登录。但是,在进入登录页面之前,服务器不会知道用户是在尝试访问 /admin 还是 /member,因此在登录服务器后不要知道重定向到哪里。

1) 浏览器的历史位置数组包含的不仅仅是在我们的应用程序中访问过的位置。允许访问此列表会泄露有关不应允许网站访问的用户浏览历史记录的信息。

2) 浏览器历史创建位置对象,其路径名是 URL 的完整路径名。但是,您可以为历史指定一个基本名称,在这种情况下,完整路径名的一部分将被有效地忽略。

3) 静态文件服务器中的浏览器历史将在我们的服务器上有一个真实的位置来获取我们的 HTML,而哈希历史使用 URL 的哈希部分来设置和读取位置。

4) 哈希历史是依赖的,因为它将所有路径信息存储在 URL 的哈希中。