如何反应路由器处理URL更改而不会导致浏览器请求

时间:2017-08-17 11:34:30

标签: javascript reactjs react-router

据我所知,到目前为止,像Angular JS这样的前端框架,Backbone JS正在利用哈希值。但反应路由器并不一定需要散列。有人可以解释一下这是如何工作的?

我想这一定很简单,可能会阻止更改网址时的默认行为。

我不知道!

1 个答案:

答案 0 :(得分:3)

它被称为"推送状态路由"它使用HTML5 History API

var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");
  

假设http://mozilla.org/foo.html执行前面的JavaScript:

     

这会导致网址栏显示http://mozilla.org/bar.html,   但不会导致浏览器加载bar.html甚至检查   bar.html存在。

     

现在假设用户现在导航到http://google.com,然后   点击回来。此时,将显示URL栏   http://mozilla.org/bar.html,该页面将获得一个popstate事件   其状态对象包含stateObj的副本。页面本身会   看起来像foo.html,虽然页面可能会修改其内容   popstate事件。

     

如果我们再次点击返回,则网址将更改为   http://mozilla.org/foo.html,该文件将获得另一份文件   popstate事件,这次使用null状态对象。去吧   返回不会更改文档的内容   上一步,虽然文档可能会更新其内容   收到popstate事件后手动。

一旦我们理解了这一切,我们只需要监听窗口的popstate事件,这些事件将在每次状态更改时触发,无论是通过点击触发,按下浏览器后退按钮等等