2016-11-28 77 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); 
} 
} 
相关问题