Как поместить 2 разные полезные нагрузки в reducer redux?

#reactjs #typescript #redux #react-redux #frontend

#reactjs #typescript #redux #react-redux #интерфейс

Вопрос:

У меня есть reducer для клиентских приложений. Поскольку существуют два разных приложения, я должен обрабатывать разные полезные нагрузки.

 export interface CLIENT_STATE_APPLICATION_ONE {
  clientData: ClientData | null;
  application: ApplicationData | null;
  detailedLoan: any;
  customerId: string;
}

export interface CLIENT_STATE_APPLICATION_TWO {
  clientData: ClientData | null;
  application: EntityInstance | null;
  detailedLoan: any;
  customerId: string;
}

const initialValues = {
  clientData: null,
  application: null,
  detailedLoan: null,
  customerId: '',
};

export default function(state = initialValues, action: {type: CLIENT_ACTIONS,
  payload: Pick<CLIENT_STATE_APPLICATION_ONE, 'clientData' | 'application'  | 'customerId'>}) {
  switch (action.type) {
    case CLIENT_ACTIONS.SET_CLIENT_DATA:
      return {
        ...state,
        clientData: action.payload
      };
    case CLIENT_ACTIONS.SET_CLIENT_APPLICATION:
      return {
        ...state,
        application: action.payload,
      };
    case CLIENT_ACTIONS.SET_CUSTOMER_ID:
      return {
        ...state,
        customerId: action.payload,
      };
    default:
      return state;
  }
}
  

как сделать это для второй полезной нагрузки? Я также хочу сделать это для приложений второго типа. Теперь это работает только для первого.

Комментарии:

1. Похоже, вы устанавливаете весь объект полезной нагрузки для каждого свойства: customerId: action.payload

2. Но чтобы ответить на ваш вопрос, вы могли бы использовать разные action.type значения для каждого приложения, вы могли бы добавить дополнительное свойство в полезную нагрузку для applicationType , или вы могли бы выяснить, какой тип он имеет во время выполнения, изучив значения.