Как лучше объединить несколько действий в редукторе на рендеринг (React, useReducer)?

Как лучше всего использовать логику сокращения из нескольких действий на рендеринг? В этом примере показан базовый пример моего текущего решения (создание нового действия, сочетающего логику), но должен быть способ лучше.

Базовый пример:

Я использую useReducer от React, а не Redux

const [state, dispatch] = useReducer(reducer, {v1: 0, v2: 0});

Базовый редуктор, использующий новое действие, складывающее логику первых двух действий:

function reducer(state, action) {
  const { type, payload: {v1, v2} } = action;
  switch (type) {
    case SET_V1:
      return {...state, v1: setV1(v1)};
    case SET_V2:
      return {...state, v2: setV2(v2)};
    case SET_V1_AND_V2:
      return {...state, v1: setV1(v1), v2: setV2(v2)};
  }
}

Сократите логику, делегированную функциям, чтобы стандартизировать логику:

const setV1 = (v1) => v1;
const setV2 = (v2) => v2;

Спасибо за вашу помощь


person David    schedule 10.02.2021    source источник
comment
Могу я спросить, почему вы хотите это сделать?   -  person dongnhan    schedule 10.02.2021
comment
Потому что в некоторых моих действиях есть логика   -  person David    schedule 10.02.2021


Ответы (1)


Может это может помочь:

Связанный вопрос Использование Combine Reducer

const combineReducers = (slices) => (state, action) =>
  Object.keys(slices).reduce( // use for..in loop, if you prefer it
    (acc, prop) => ({
      ...acc,
      [prop]: slices[prop](acc[prop], action),
    }),
    state
  );
person Sergei Sevriugin    schedule 10.02.2021