Использование перехватчиков реакции в сочетании с redux-saga (или любым другим промежуточным программным обеспечением) - PullRequest
0 голосов
/ 05 мая 2020

Этот вопрос уже задавался здесь раньше, однако я еще не нашел правильного ответа, просто интересно, пропустил ли я что-то или действительно ли это в настоящее время невозможно.

В частности, есть 2 основных различия между хуками и redux-saga (или любым другим промежуточным программным обеспечением):

  1. в redux-saga я могу запускать выполнение кода при отправке действия, а в хуках я могу запускать выполнение кода только при изменении состояния. Эти 2 не всегда эквивалентны
  2. хуки должны существовать в контексте компонента, однако некоторые «фоновые» логики c (такие как инициализация, определение местоположения и т. Д. c) не связаны со спецификацией c компонент. В redux-saga у меня есть возможность определить его в «глобальной области видимости», в то время как в хуках я должен прикрепить его к некоторому «случайному» компоненту (возможно, приложению или любому другому компоненту высокого уровня).

Итак, возможно ли каким-то образом «соединить» эти два подхода, или я должен просто выбрать наиболее подходящий метод для каждого конкретного случая c?

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Это разные инструменты для решения разных задач. Хуки работают внутри функционального компонента с состоянием и жизненным циклом. Redux внутренне работает с состоянием и жизненным циклом всего реагирующего приложения. Саги помогают справиться с асинхронными эффектами, такими как выборка внешних данных.

Вообще говоря, вы хотите максимально ограничить область переменных и logi c. Если специфицированная c часть «состояния» является только релевантной для одного компонента, то оставьте ее в состоянии компонента. Но если он нужен нескольким компонентам или самому приложению, то сохраните его в состоянии приложения. То же самое относится к асинхронным вызовам. Если один внешний вызов используется только одним компонентом, оставьте его там, но если несколько компонентов могут выполнять одни и те же внешние асинхронные вызовы c, тогда пусть саги обрабатывают их.

Вы можете использовать как столько или меньше, сколько необходимо в каждом компоненте для решения вашей проблемы.

0 голосов
/ 05 мая 2020
  1. В Redux-saga вы можете выполнять код только при отправке действия. Хуки более общие c, например, с помощью useReducer вы можете запускать код при отправке действия, с помощью useEffect вы можете запускать код при монтировании / обновлении / отключении и т. Д. c.
  2. Redux -saga также существует в контексте компонента, или, точнее, весь Redux существует в компоненте поставщика хранилища (обычно верхнего уровня), а Redux-saga является только одним из его промежуточных программ. Итак, в основном, если у вас есть глобальное приложение logi c и вы поместили его в свой App компонент, это не какой-то случайный компонент , это правильное место для размещения logi c to.

Я также недавно нашел простую библиотеку https://www.npmjs.com/package/use-saga-reducer, которая представляет саги для useReducer React. (Я все еще не уверен, что это хорошая идея - просто потому, что вы можете, это не значит, что вы должны, для меня обычно достаточно хуков asyn c функций, но это, по крайней мере, интересно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...