" push"之间有什么区别?来自react-router-redux和" browserHistory"的方法来自react-router?

时间:2017-04-27 12:54:22

标签: reactjs react-router react-router-redux

当用户从一个页面/路线导航到另一个页面/路线时,我正在尝试更新react中的历史记录。但是对于我应该使用什么方法来实现这个以及为什么会感到困惑?

import { browserHistory } from 'react-router'
browserHistory.push('/bag')

OR

import { routerMiddleware, push } from 'react-router-redux'
const middleware = routerMiddleware(browserHistory)
const store = createStore(
  reducers,
  applyMiddleware(middleware)
)

store.dispatch(push('/bag'))

请帮忙。在此先感谢:)

2 个答案:

答案 0 :(得分:7)

基本上,如果您了解使用redux和react-router-redux的原因:

store.dispatch(push('/bug'))保持导航状态在商店中,推送并导航到路线

虽然

browserHistory.push('/bag')只需按下并导航到路线。

From the source code itself

  

/ **
  *这些操作对应于历史API   *相关的   routerMiddleware会在他们到达之前捕获这些事件   * 您的   reducer并重新发布它们作为历史记录的匹配函数。 * /

     

export const push = updateLocation(' push')

我建议在尝试理解差异或工作原理时查看源代码。它有助于学习,也可以深入了解您正在使用的图书馆的最新情况:)

答案 1 :(得分:0)

有两种情况

  1. 如果您已将connected-react-router与redux存储库集成在一起,则它是push方法,指示历史记录更改位置,因此浏览器URL也会更改,但是,如果您改为使用浏览器历史记录中的push进行导航,则会直接将历史记录更改位置
    接下来要了解的重要一点是使用这两种方法之一,将调用connected-react-router的{​​{1}}操作,它将导致呈现适当的组件

因此本质上没有区别,区别在于调用LOCATION_CHANGE的push方法将在内部调用历史记录