Как мне «уничтожить все» для данного типа ресурсов в redux-saga?

#react-redux #redux-saga

Вопрос:

Я новичок в Redux-Saga, поэтому, пожалуйста, примите на себя очень шаткие базовые знания.

В Redux я могу определить действие и последующий редуктор для обработки этого действия. В моем редукторе я могу делать все, что захочу, например, «удалить все» из определенного узла дерева состояний, например.

 switch action.type
...
case 'DESTROY_ALL_ORDERS'
  return {
    ...state,
    orders: []
  }
 

Однако мне кажется (после прочтения документов), что редукторы определяются Saga, и у вас есть доступ к ним в виде определенных заданных префиксов глаголов CRUD с исправлениями после вызова. Например.
fetchStart , destroyStart

Мой инстинкт-использовать destroyStart , но метод принимает экземпляр модели, а не коллекцию, т. Е. Он может уничтожить только данный экземпляр ресурса (в моем случае один заказ).

TL;DR

  1. Существует ли destroyStart эквивалент для группы записей сразу?
  2. Если нет, есть ли способ добавить пользовательское поведение в созданные Сагой редукторы?

Что вы пропустили? Не стесняйтесь быть таким злым, как хотите, я понятия не имею, что я делаю, но когда вы закончите поджаривать меня, сделайте мне одолжение и направьте меня в правильном направлении.

Редактировать:

Чтобы уточнить, я не пытаюсь удалить записи из своей базы данных. Я только хочу очистить хранилище Redux от всех записей «Заказа».

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

1. Ваше понимание цели саг неверно или недостаточно. Вы все равно можете/должны очистить свое состояние в редукторе.

2. Не могли бы вы уточнить? Фрагмент мог бы сотворить для меня чудеса.

3. @Чадс. Правильно ли говорить, что редукторы определяются автоматически с помощью функции Saga createResource ? Вот что меня бросает. Возможно, это причуда в конкретной кодовой базе, на которую я смотрю, но явных редукторов нет. Или было бы правильно сказать, что Саги не связаны с редукторами? Вы правы, что моего понимания недостаточно, вот почему мне нужна помощь. Заранее спасибо

4. Редукторы полностью независимы от саг. Я не совсем понимаю, почему вы смешиваете эти два понятия. Существует библиотека под названием redux-saga-resources , которая позволяет вам избежать некоторых шаблонных вещей для редукторов CRUD, и эта библиотека создает редукторы для ваших ресурсов для вас. Но если вы просто используете redux и redux-saga, вы бы сами написали редукторы. В любом случае состояние очищается редуктором. Либо тот, который вы написали, либо тот, который вам предоставляет ваша библиотека.

5. После более глубокого изучения redux-saga-resources я полагаю, что ответ на ваш вопрос Is it correct to say that reducers are defined automagically via the [...] createResource function? -да. В документации объясняется, что ресурс, созданный с помощью createResource , имеет reducer метод, который вы передаете в createStore в качестве редуктора состояния ресурса. См.: github.com/Zaibot/redux-saga-resources#readme

Ответ №1:

Здесь были получены два ключевых бита знаний.

  1. Моя команда использует библиотеку под названием redux-api-ресурсы, которую я в какой-то степени объединял с Saga. Эта библиотека была создана бывшим сотрудником и добавляет столько же сложности, сколько и устраняет. Я бы не рекомендовал этого делать. DestroyStart предоставляется этой библиотекой и не имеет прямого отношения к Saga. Однако ответ для всех, кто использует эту библиотеку (redux-api-ресурсы), — нет, нет действия массового уничтожения.
  2. Редукторы создаются Saga, как указано в приведенных выше комментариях @Chad S.. Ошибка в моем мышлении заключалась в том, что я считал, что должен каким-то образом взломать этот редуктор и наполнить его сложной логикой. «Простой» способ сделать это-включить логику в функцию генератора, в которой вы (можете) определить свой поток управления. Я не утверждаю, что это лучшая практика, только то, что именно так мне удалось заставить свой код работать.

Я очень мало знаю о Saga и Redux в целом, поэтому, пожалуйста, отнеситесь к этим ответам с недоверием.