browserHistory.push()和context.router.push()之间的区别是什么?

时间:2017-11-28 18:05:14

标签: reactjs react-router browser-history

我正在学习React Route,以帮助我构建一个可以在成功登录后从登录页面重定向到主页的应用程序。

我在这里阅读官方教程:https://github.com/reactjs/react-router-tutorial/tree/master/lessons/12-navigating

在本课程中,他们介绍了两种以编程方式导航的方法,即browserHistory和context.route。他们说浏览器历史存在一个潜在的问题:

  

如果您将不同的历史记录传递给路由器而不是此处使用,则无法正常工作。使用除browserHistory以外的任何东西并不常见,所以这是可以接受的做法。

你能给我一个关于If you pass a different history to Router than you use here是什么的例子吗?

我在我的应用程序中尝试了这两种方法,但无法找到任何区别。 THX!

1 个答案:

答案 0 :(得分:1)

这是一本非常古老的教程。我建议改为查看official react router documentation

您提供的示例直接使用browserHistory实例来调用history api方法。如果您将react路由器配置为使用浏览器历史记录,这将有效,但有不同的历史记录类型(哈希历史记录,内存历史记录等),甚至可能有多个browserHistory实例。虽然所有不同的历史记录类型都支持push方法,但如果您最初将react路由器配置为使用哈希历史记录,但是在组件中导入浏览器历史记录,则推送调用将无法正常工作,因为您的路由器未配置为侦听该浏览器历史实例。

虽然您可以使用上下文来获取路由器实例,但更简洁的方法是使用withRouter HOC将路由器实例作为支柱注入组件。然后,您可以调用router.push,而不必担心您正在使用的历史记录。

您可以阅读有关历史here

的更多信息