#react-redux #redux-saga
Вопрос:
Я новичок в Redux-Saga, поэтому, пожалуйста, примите на себя очень шаткие базовые знания.
В Redux я могу определить действие и последующий редуктор для обработки этого действия. В моем редукторе я могу делать все, что захочу, например, «удалить все» из определенного узла дерева состояний, например.
switch action.type
...
case 'DESTROY_ALL_ORDERS'
return {
...state,
orders: []
}
Однако мне кажется (после прочтения документов), что редукторы определяются Saga, и у вас есть доступ к ним в виде определенных заданных префиксов глаголов CRUD с исправлениями после вызова. Например.
fetchStart
, destroyStart
Мой инстинкт-использовать destroyStart
, но метод принимает экземпляр модели, а не коллекцию, т. Е. Он может уничтожить только данный экземпляр ресурса (в моем случае один заказ).
TL;DR
- Существует ли
destroyStart
эквивалент для группы записей сразу? - Если нет, есть ли способ добавить пользовательское поведение в созданные Сагой редукторы?
Что вы пропустили? Не стесняйтесь быть таким злым, как хотите, я понятия не имею, что я делаю, но когда вы закончите поджаривать меня, сделайте мне одолжение и направьте меня в правильном направлении.
Редактировать:
Чтобы уточнить, я не пытаюсь удалить записи из своей базы данных. Я только хочу очистить хранилище 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:
Здесь были получены два ключевых бита знаний.
- Моя команда использует библиотеку под названием redux-api-ресурсы, которую я в какой-то степени объединял с Saga. Эта библиотека была создана бывшим сотрудником и добавляет столько же сложности, сколько и устраняет. Я бы не рекомендовал этого делать.
DestroyStart
предоставляется этой библиотекой и не имеет прямого отношения к Saga. Однако ответ для всех, кто использует эту библиотеку (redux-api-ресурсы), — нет, нет действия массового уничтожения. - Редукторы создаются Saga, как указано в приведенных выше комментариях @Chad S.. Ошибка в моем мышлении заключалась в том, что я считал, что должен каким-то образом взломать этот редуктор и наполнить его сложной логикой. «Простой» способ сделать это-включить логику в функцию генератора, в которой вы (можете) определить свой поток управления. Я не утверждаю, что это лучшая практика, только то, что именно так мне удалось заставить свой код работать.
Я очень мало знаю о Saga и Redux в целом, поэтому, пожалуйста, отнеситесь к этим ответам с недоверием.