Redux过渡到动作执行后

时间:2016-01-28 09:23:07

标签: javascript react-router redux

我有像

这样的动作
export function loginSuccess(response){
    return (dispatch, getState) => {
    dispatch({ response, type: types.LOGIN });
    router.transitionTo("/profile")

  };
}

在成功执行我的操作后,我想将其重定向到/profile

我在这里得到router is not defined

2 个答案:

答案 0 :(得分:4)

你必须将路由器传递给你的redux thunk动作创建者(你的代码不是一个动作,但是当我写动作创建者时)。例如,它可能看起来像:

export function loginSuccess(router, response){
  return (dispatch, getState) => {
    dispatch({ response, type: types.LOGIN });
    router.transitionTo("/profile")

  };
}

您是否可以在调用此动作创建者的位置访问路由器?那里有空吗?如果是,那么你有类似的东西(我不知道什么是response):

this.props.dispatch(loginSuccess(response));

您必须将其更改为:

this.props.dispatch(loginSuccess(this.context.router, response));

我假设您可以按上下文访问路由器。

因为你没有展示你如何调用这个动作我只是在猜测。我希望我的指示能帮到你。

还有一件事。新的react-router api在路由器中没有transitionTo方法!我不知道你是否使用新的或旧的api。但如果你得到如下错误:

  

调用transitionTo失败:'location.search.substring不是函数'

然后改变:

router.transitionTo("/profile")

为:

router.push("/profile")

答案 1 :(得分:1)

外部组件,您可以使用history提供当前路线

import { browserHistory } from 'react-router'

export function loginSuccess(response){
    return (dispatch, getState) => {
    dispatch({ response, type: types.LOGIN });
    browserHistory.push("/profile")
  };
}