2016-01-28 5 views
3

У меня есть действие, какRedux переход после выполнения действия

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

    }; 
} 

Здесь после успешного выполнения моих действий, я хотел бы перенаправить его на /profile.

Здесь я получаю router is not defined.

+0

'router' должен быть передан на' this.props'. –

+0

Это в моем действии .. как я могу передать его в этом.props .. – aryan

+0

Ах, не читал достаточно внимательно. Используете ли вы 'redux-router'? –

ответ

4

Вы должны пройти маршрутизатор к Redux санк действия создателя (вы пайса кода не является действием, но как я уже писал действий создателя). Например, это может выглядеть так:

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)); 

Я предполагаю, что у вас есть доступ к маршрутизатору по контексту.

Поскольку вы не показываете, как вы вызываете это действие, я только предполагаю. Надеюсь, что моя инструкция поможет вам.

И еще одно. Новый ответ-маршрутизатор api не имеет метода перехода в маршрутизатор! Я не знаю, используете ли вы новый или старый api. Но если вы получаете сообщение об ошибке, как:

Вызов transitionTo терпит неудачу с: 'location.search.substring не является функцией'

затем изменить также:

router.transitionTo("/profile") 

к:

router.push("/profile") 
+0

вещь I Я вызываю это действие из моего компонента, и я не получаю объект 'this', это действие .. вы можете помочь ... – aryan

+0

Да, напишите свой компонентный контент в своем вопросе (если можно удалить весь устаревший код). –

+0

Но если я должен угадать больше. Затем вы пытались вызвать свое действие в методе, который вызывается как обратный вызов. Вы можете попробовать добавить в конструктор: 'this.yourMethodWhichInvokeAction = this.yourMethodWhichInvokeAction.bind (this)' –

1

Внешние компоненты, которые можно использовать history, чтобы обеспечить текущий маршрут

import { browserHistory } from 'react-router' 

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

Это дает результат в соответствии с историей браузера. Я не хочу этого ... Было бы так приятно, если бы вы могли объяснить, как я могу это сделать с помощью метода сокращения, например router.transitionTo («/ profile») – aryan

Смежные вопросы