我有像
这样的动作export function loginSuccess(response){
return (dispatch, getState) => {
dispatch({ response, type: types.LOGIN });
router.transitionTo("/profile")
};
}
在成功执行我的操作后,我想将其重定向到/profile
。
我在这里得到router is not defined
。
答案 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")
};
}