第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Redux:調(diào)用相同的 api 但分派不同的操作

Redux:調(diào)用相同的 api 但分派不同的操作

largeQ 2023-05-11 16:31:38
目前我有一個 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() });        });    }}現(xiàn)在我想使用相同getUsers()但帶有參數(shù) id(例如getUsers({ UserId: 'jamesbond007' })),并且在我想要的操作中dispatch({ type: 'GET_USER_BY_ID_SUCCESS', user: res.data.Data })如何使用相同的 api 調(diào)用分派不同的操作?我應(yīng)該復(fù)制相同的代碼但更改動作調(diào)度嗎?如果這樣做,它就變成了重復(fù)函數(shù)。
查看完整描述

2 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗 獲得超4個贊

我找到了這樣做的方法。我聲明變量REQUEST, SUCCESS, FAILURE并檢查參數(shù)對象是否包含UserId. 如果是,它將 dispatchGET_USER_BY_ID而不是GET_USERS.


export function getUsers (params) {

    let REQUEST, SUCCESS, FAILURE;


    if (!_.isEmpty(params) && params.UserId) {

        REQUEST = 'GET_USER_BY_ID_REQUEST';

        SUCCESS = 'GET_USER_BY_ID_SUCCESS';

        FAILURE = 'GET_USER_BY_ID_FAILURE';

    } else {

        REQUEST = 'GET_USERS_REQUEST';

        SUCCESS = 'GET_USERS_SUCCESS';

        FAILURE = 'GET_USERS_FAILURE';

    }


    return async dispatch => { 

        await dispatch({ type: 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: SUCCESS, payload: res.data.Data });

        }).catch (err => {

            dispatch({ type: FAILURE, error: err.toString() });

        });

    }

}

請注意,在我的減速器中,我只使用action.payload. 例如:


case 'GET_USERS_SUCCESS':

    return { ...state, isFetching: false, userList: action.payload };


case 'GET_USER_BY_ID_SUCCESS':

    return { ...state, isFetching: false, user: action.payload };


查看完整回答
反對 回復(fù) 2023-05-11
?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗 獲得超4個贊

你可以通過 param 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);

但是,我認(rèn)為你的想法并不好。最好用兩種方法來做邏輯。它是可讀的。


查看完整回答
反對 回復(fù) 2023-05-11
  • 2 回答
  • 0 關(guān)注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號