reactjs - browserHistory.push() 和 context.router.push() 有什么区别

标签 reactjs react-router browser-history

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

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

在本类(class)中,他们介绍了两种以编程方式导航的方法,即 browserHistory 和 context.route。他们说 browserHistory 存在一个潜在问题:

If you pass a different history to Router than you use here, it won't work. It's not very common to use anything other than browserHistory, so this is acceptable practice.

您能给我一个关于如果您向路由器传递的历史记录与此处使用的历史记录不同的历史记录是什么的示例吗?

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

最佳答案

这是一个非常古老的教程。我建议查看official react router documentation反而。

您提供的示例直接使用 browserHistory 实例来调用历史 API 方法。如果您将 React Router 配置为使用浏览器历史记录,那么这将起作用,但有不同的历史记录类型(哈希历史记录、内存历史记录等),甚至可能有多个 browserHistory 实例。虽然所有不同的历史记录类型都支持 Push 方法,但如果您最初将 React Router 配置为使用哈希历史记录,但在组件中导入浏览器历史记录,则 Push 调用将根本不起作用,因为您的路由器未配置为监听该浏览器历史实例。

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

您可以阅读更多有关历史的信息here

关于reactjs - browserHistory.push() 和 context.router.push() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47538166/

相关文章:

javascript - Video.js 无法在带有服务器端渲染的 next.js 中工作

meteor - 当 React 组件的属性是来自 Meteor 的响应式(Reactive)数据源时,我可以让它重新渲染自身吗?

reactjs - 如何使用 React Router v4 调度位置变化时的操作

reactjs - 在 React 中渲染重定向总是比使用 this.props.history.push 更好吗?

javascript - (React) 动态组件条件设置状态

javascript - 我可以使用 JavaScript 检查浏览器历史记录中是否有下一页吗?

html - 访问 React Router 历史堆栈

reactjs - 就像在 React Hooks 中一样,给初始值一个空对象

javascript - 当按下后退按钮时让 jQuery 触发 Ajax 请求

javascript - 无法加载使用 webpack-image-loader 动态导入并从 JSON 文件调用的图像