2016-09-19 6 views
3

Используйте случай:Как изменить URL после успешного вызова апи в саге

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

try { 
    const request = yield call(subcribe, action.payload.data) 
    yield put({ type: SUBSCRIBE_SUCCESS, payload: request.data }) 
    yield put(showNotification(NOTIFICATION_SUCCESS, 'Please check your email.')) 
    } catch(e) { 
    ... 
    } 

есть способ, чтобы перейти к странице успеха /subscribe-success раз то есть я получил успешный ответ от сервера?

ответ

3

Если вы получили ответ от вашего сервера с успехом, вы должны изменить состояние сводки на что-то вроде subsribeSuccess: true. Чтобы у вас была возможность проверить это состояние в компоненте компонента componentWillReceiveProps (nextProps) и сделать browserHistory.push ('subscribe-success').

Вот пример:

Предполагая, что вы изменили свое состояние Redux до {... состояние, subscribeSuccess: истинно} от редуктора, когда ваш редуктор получает тип SUBSCRIBE_SUCCESS действия.

на вашем реагировать компонент:

componentWillReceiveProps(nextProps){ 
    if(myConnectedReduxState.subscribeSuccess){ 
    browserHistory.push('subscribe-success'); 
    } 
} 

Так, насколько я понял, ваша проблема не связана с сагой. Вы можете реализовать эту логику в любом месте в проектах реагирования-сокращения.

+2

да, вы правы, это не было специфично для саги. спасибо за ваш ответ, позволил мне рассмотреть возможность использования функции push внутри маршрутизатора реакции, т. е. 'import {push} из« response-router-redux'' », а затем изменить местоположение так, чтобы« yield put »(push (« subscribe- успех)) '. Я также реализовал вашу предложенную логику в компоненте для визуализации другого представления. еще раз спасибо! – Cnolimit