react router为什么推荐使用browserHistory而不推荐hashHistory?

react-router的官方文档推荐使用browserHistory,但是我在网上找了很久都没有找到一个明确的原因。

我看了hashHistory和browserHistory的区别,hashHistory可以直接使用,而browserHistory还需要配置服务器。所以我想知道为什么推荐使用browserHistory?它相较于hashHistory有什么明显的优势?

阅读 15.1k
4 个回答

首先 browserHistory 其实使用的是 HTML5 的 History API,浏览器提供相应的接口来修改浏览器的历史记录;而 hashHistory 是通过改变地址后面的 hash 来改变浏览器的历史记录;

History API 提供了 pushState() 和 replaceState() 方法来增加或替换历史记录。而 hash 没有相应的方法,所以并没有替换历史记录的功能。但 react-router 通过 polyfill 实现了此功能,具体实现没有看,好像是使用 sessionStorage。

另一个原因是 hash 部分并不会被浏览器发送到服务端,也就是说不管是请求 http://domain.com/index.html#foo 还是 http://domain.com/index.html#bar ,服务只知道请求了 index.html 并不知道 hash 部分的细节。而 History API 需要服务端支持,这样服务端能获取请求细节。

还有一个原因是因为有些应该会忽略 URL 中的 hash 部分,记得之前将 URL 使用微信分享时会丢失 hash 部分。

我倒是感觉这是前端圈子还在瞎打转的原因.

本来 / 开头的东西对 url 来说是有自己的语义的, 要么请求静态资源的目录, 要么对应后台接口的模块化. 结果为了这么个特性得专门配置成另外一层意思.

好看,而且比较像正常的URL

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏