首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在带react-router-v4的操作创建器中使用history.push?

在带react-router-v4的操作创建器中使用history.push?
EN

Stack Overflow用户
提问于 2018-01-30 13:57:08
回答 1查看 19.7K关注 0票数 24

我发现,在不使用react-router-reduxaction creator async action完成中路由的唯一工作方法是将history属性从组件传递到操作创建者,然后执行以下操作:

代码语言:javascript
复制
history.push('routename');

由于BrowserRouter忽略了传递给它的历史属性,因此我们不能将自定义历史对象与浏览器历史一起使用。

解决这个问题的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 14:04:55

您可以使用具有自定义历史记录的Router,而不是使用BrowserRouter

代码语言:javascript
复制
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并使用它进行动态导航,如下所示

代码语言:javascript
复制
import { history } from '/path/to/index';

const someAction = () => {
    return dispatch => {
        ApiCall().then((res) => {
            dispatch({type: 'SOME_CALL', payload: res })
            history.push('/home');
        })
    }
}
票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48514773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档