使用history.push与反应路由器-V4行动创造者?使用history.push与反应路由器-

2019-05-12 02:41发布

我发现的唯一的工作方法,工作了这一点,而无需使用react-router-redux路由从action creator async action完成是通过将history从组件到行动的创建者和做道具:

history.push('routename');

由于BrowserRouter忽略传递给它因此,我们不能使用自定义的历史对象与browserhistory历史道具。

什么是工作了这一点最好的方式?

Answer 1:

而不是使用的BrowserRouter你可以使用Router使用自定义的历史一样

import { Router } from 'react-router'

import createBrowserHistory from 'history/createBrowserHistory'

export const history = createBrowserHistory()

<Router history={history}>
  <App/>
</Router>

在这种情况下,你history.push()会工作。 随着BrowserRouter history.push不起作用,因为创建新browserHistory不会起作用,因为<BrowserRouter>创造自己的历史实例,并侦听的更改。 所以不同的实例,将更改URL,但不更新<BrowserRouter>

一旦你创建一个自定义history ,你可以将其导出,然后在导入action creator ,并用它来导航像动态

import { history } from '/path/to/index';

const someAction = () => {
    return dispatch => {
        ApiCall().then((res) => {
            dispatch({type: 'SOME_CALL', payload: res })
            history.push('/home');
        })
    }
}


文章来源: Use history.push in action creator with react-router-v4?