2016-11-28 78 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)AUTH和登錄/註銷的負荷是不言自明。

我需要在成功加載或登錄後觸發一些進一步的操作。

我想執行一個GET請求來獲取一些只有在登錄後纔可用的私有數據,並將這些私有數據存儲在redux存儲中以供應用程序的各個部分使用。我怎麼做?

+0

你讀了有關在終極版文檔[異步操作(http://redux.js.org/docs/advanced/AsyncActions.html)的部分?這解釋得很好。 –

回答

6

您應該使用async actions來完成。

你必須編寫異步動作創建器,它會調用多個動作。

類似的東西:

function multipleAtions() { 
return (dispatch) => { 
    dispatch(load_action); 
    return fetch(`http://some_request_here`) 
      .then(() => dispatch(another_action); 
} 
} 
相關問題