redux行动中的多次派遣

时间:2018-05-28 12:29:28

标签: redux react-redux

我想从另一个动作发出动作但不能这样做。当我尝试这样做时,它无法找到getAllUser方法。 下面是我的动作类。

    export const myActions = {

        getAllUser() {
            return (dispatch) => {
                makeApiCall()
                    .then((response) => {
                        dispatch({
                            type: USER_SUCCESS,
                            payload: response,
                        });
                    })
                    .catch((error) => {
                        dispatch({
                            type: USER_FAILURE,
                            payload: error,
                        });
                    });
            };
        },

        addUser(user) {
            return (dispatch) => {
                makeApiCall(user)
                    .then((response) => {
                        /*
                        Need help here : 
                        wants to call above getAllUser()
                           .then(() => 
                              dispatch({
                                 type: ADD_SUCCESS,
                                 payload: response,
                              });
                            )
                        */
            };
        },
    };

我尝试了各种方法,例如

myActions.getAllUser()
    .then((response) => 
       dispatch({
           type: ADD_SUCCESS,
           payload: response,
       });
    );

并尝试直接发送,

        const self = this;
        dispatch(self.getAllUser());
        dispatch({
            type: ADD_SUCCESS,
            payload: response,
        });

另一种解决方法是在addUser成功之后,更新reducer,然后再从UI调用getAccount再次刷新结果,但只是想知道如何使用多个调度实现此目的

1 个答案:

答案 0 :(得分:1)

您可以单独导出这些函数,而不是将它包装在同一个对象下:

export const getAllUser = () => dispatch => { ... }

export const addUser = () => dispatch => { 
  ... 
  dispatch(getAllUser());
}

如果需要,您仍然可以全部导入它们:

import * as myActions from '...';

或者您可以先声明getAllUser然后添加到myActions,但上述解决方案更清晰。

const getAllUser = ...
const myActions = {
  getAllUser,
  addUser = ... { dispatch(getAllUser()) }
}