You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

redux-api-middleware如何向对应reducer传递自定义参数accountID

redux-api-middleware 支持在types配置中通过meta字段携带自定义参数,你需要的accountID可以直接存在meta里,请求完成后派发的action会自带该字段,reducer中可直接读取。

第一步:修改Action定义

把原来types数组里的字符串替换为带meta字段的配置对象,将闭包中拿到的accountID存入meta:

import { RSAA } from "redux-api-middleware";
import { API_ENDPOINT, AUTH_HEADERS } from "../util/constants";
import { ACCESS_TOKEN } from "../util";

export function getAccount(accountID) {
  return {
    [RSAA]: {
      endpoint: `${API_ENDPOINT}/api/Expense/GetAccount/${accountID}`,
      headers: {
        ...AUTH_HEADERS,
        Authorization: `Bearer ${ACCESS_TOKEN}`,
      },
      method: "GET",
      // 替换原字符串类型配置,用对象形式挂载自定义meta
      types: [
        {
          type: "GET_ACCOUNT_REQUEST",
          meta: { accountID }
        },
        {
          type: "GET_ACCOUNT_RECEIVE",
          meta: { accountID }
        },
        {
          type: "GET_ACCOUNT_FAILURE",
          meta: { accountID }
        }
      ],
    },
  };
}

第二步:修改Reducer逻辑

先把初始状态的payload改为空对象,适配多账户键值对的存储结构;再在对应处理分支中从action.meta读取accountID,按键更新数据即可:

import store from '../util/store';

const INITIAL_STATE = store.setInitialState({
  payload: {}, // 改为空对象,存储结构为 { [accountID]: 对应账户数据 }
  isFetching: false,
  isSuccess: false
});

const getAccountReducer = (state = INITIAL_STATE, action) => {
  const accountID = action.meta?.accountID;
  switch (action.type) {
    case "GET_ACCOUNT_REQUEST":
      return {
        ...state,
        isFetching: true,
      };
    case "GET_ACCOUNT_RECEIVE":
      return {
        ...state,
        isFetching: false,
        isSuccess: true,
        payload: {
          ...state.payload,
          [accountID]: action.payload
        },
      };
    case "GET_ACCOUNT_FAILURE":
      return {
        ...state,
        isFetching: false,
        isSuccess: false,
        payload: {
          ...state.payload,
          [accountID]: action?.payload?.response
        },
      };
    default:
      return state;
  }
};

export default getAccountReducer;

补充:如果需要同时发起多个不同accountID的请求,建议把isFetching、isSuccess也改成按accountID为键存储的结构,避免全局状态互相覆盖。

内容的提问来源于stack exchange,提问作者Abhishek kamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:15:33