Как отфильтровать данные, передаваемые во вложенные комбинированные редукторы ReactRedux? - PullRequest
0 голосов
/ 12 апреля 2019

Мое состояние содержит поле «моды», которое представляет собой список объектов javascript, которое содержит поле «элементы», которое само является списком (для примера) строк:

state = {
  mods: [
    {
       elements: [
         'Element 1',
         'Element 2'
       ],
       ...
    },
    ...
  ],
  ....
}

Посредством combReducers я вырезал моды из остальной части состояния, получая сам список модов, а затем снова вырезая элементы из остальной части объекта мода.

const ElementReducer = function(state, action) {...}
const ModReducer = combineReducers({
  elements: ElementReducer,
  ...
});
const reducer = combineReducers({
  mods: ModReducer,
  ...
});

Проблема возникает, когдаЯ пытаюсь применить действия к списку элементов;следующее действие

const action = {
  type: 'ADD_MOD_ELEMENT',
  mod_id: 1
};

, очевидно, должно добавить в мод единственный элемент, имеющий, как id, 1, но в момент, когда я попадаю в ElementReducer, состояние представляет собой простой массив строк, без возможности понятьк какому моду он принадлежит.

Есть ли способ решить, вызывать ли редуктор для определенного объекта в зависимости от содержимого действия?

ИтакДо сих пор, как решения, я видел:

  1. Нормализация состояния объекта;Я бы предпочел не делать этого, если возможно, поскольку текущая структура - это именно та, которую я использую для связи с моим REST API

  2. Не создавайте ModReducer, а обрабатывайте все действия водна функция (это решение, которое я сейчас принимаю), но я не нахожу его удовлетворительным.

...