首页 > 解决方案 > Redux:调用相同的 api 但调度不同的操作

问题描述

目前我有一个 redux 操作,它是getUsers()让所有用户。

export function getUsers (params) {
    return async dispatch => { 
        await dispatch({ type: 'GET_USERS_REQUEST' });

        const urlParams = params ? new URLSearchParams(Object.entries(params)) : null;

        return axios({
            method: 'get',
            url: Environment.GET_USERS+ `?${urlParams}`,
            headers: { 'Content-Type': 'application/json' },
        }).then (async res => {
            await dispatch({ type: 'GET_USERS_SUCCESS', allUsers: res.data.Data });
        }).catch (err => {
            dispatch({ type: 'GET_USERS_FAILURE', error: err.toString() });
        });
    }
}

现在我想使用相同getUsers()但带有参数 id(例如。getUsers({ UserId: 'jamesbond007' })),并且在我想要的操作中dispatch({ type: 'GET_USER_BY_ID_SUCCESS', user: res.data.Data })

如何使用相同的 api 调用调度不同的操作?我应该复制相同的代码但更改操作调度吗?如果这样做,它将成为重复功能。

标签: javascriptreactjsredux

解决方案


您可以通过参数 id 决定操作,例如

// all users, paramId is null
// a user, paramId is xxxx
const action = paramId ?
     { type: 'GET_USER_BY_ID_SUCCESS', user: res.data.Data } :
     { type: 'GET_USERS_SUCCESS', allUsers: res.data.Data };
dispatch(action);

但是,我认为你的想法并不好。最好用两种方法做逻辑。它是可读的。


推荐阅读