2016-11-28 2 views
4

Так у меня есть auth связанный редуктор настроить так:Как назвать действие redux после успеха другого действия?

export default function reducer(state = initialState, action = {}) { 
    switch (action.type) { 
    case LOAD: 
     return { 
     ...state, 
     loading: true, 
     } 
    case LOAD_SUCCESS: 
     return { 
     ...state, 
     loading: false, 
     loaded: true, 
     jwt: action.jwt, 
     } 
    case LOAD_FAIL: 
     return { 
     ...state, 
     loading: false, 
     loaded: false, 
     error: true, 
     errorMessage: action.error, 
     } 
    case LOGIN: 
     return { 
     ...state, 
     loaded: false, 
     loggingIn: true, 
     } 
    case LOGIN_SUCCESS: 
     return { 
     ...state, 
     loaded: true, 
     loggingIn: false, 
     jwt: jwtDecode(action.result.token), 
     } 
    case LOGIN_FAIL: 
     return { 
     ...state, 
     loggingIn: false, 
     user: null, 
     error: true, 
     errorMessage: action.error, 
     } 
    case LOGOUT: 
     return { 
     ...state, 
     loggingOut: true, 
     } 
    case LOGOUT_SUCCESS: 
     return { 
     ...state, 
     loggingOut: false, 
     user: null, 
     jwt: null, 
     } 
    case LOGOUT_FAIL: 
     return { 
     ...state, 
     loggingOut: false, 
     error: true, 
     errorMessage: action.error, 
     } 
    default: 
     return state 
    } 
} 

Где ЗАГРУЗКИ загрузка ранее сохраненной (либо куки или JWT) аутентификации и входа/выхода самоочевидны.

Мне нужно активировать некоторые дальнейшие действия после успешной НАГРУЗКИ или ВХОДА.

Я хочу выполнить запрос GET, чтобы получить некоторые личные данные о пользователе, который доступен только после входа в систему, и хранить эти личные данные в магазине redux, который будет использоваться различными частями приложения. Как мне это сделать?

+0

Вы читали раздел [Async Actions] (http://redux.js.org/docs/advanced/AsyncActions.html) в документации Redux? Это объясняет это довольно хорошо. –

ответ

6

Вы должны использовать async actions, чтобы выполнить это.

Вы должны написать создатель действия асинхронного действия, который вызовет несколько действий.

Нечто подобное:

function multipleAtions() { 
return (dispatch) => { 
    dispatch(load_action); 
    return fetch(`http://some_request_here`) 
      .then(() => dispatch(another_action); 
} 
} 
Смежные вопросы