Определенно не анти-шаблон, чтобы эпик был «только для чтения», но я хочу предупредить, что часто это признак того, что человек делает что-то менее чем идиоматичное, но это не один из тех случаев.
Вероятно, есть много способов сделать это в Rx. Вот два:
делать + игнорировать элементы
Я думаю, что это наиболее ясное из того, что он делает. do
всегда используется только для выполнения побочного эффекта (часто ведения журнала) для следующего/ошибки/завершения, не затрагивая поток. Затем мы используем ignoreElements
, чтобы предотвратить повторную отправку SOME_ACTION
(что приведет к бесконечной рекурсии). Подробнее об этих операторах см. в документации по rxjs
const someEpic = action$ =>
action$.ofType('SOME_ACTION')
.do(() => sendAnalytics())
.ignoreElements();
Анонимный наблюдаемый
Это несколько более «легкое» решение, поскольку оно не использует никаких операторов, кроме ofType
. Я бы предостерег от использования этого, пока вы и ваши товарищи по команде не освоите RxJS и, в частности, создание пользовательских/анонимных Observables. то есть не пишите код, который вы не понимаете.
const someEpic = action$ =>
new Observable(() =>
action$.ofType('SOME_ACTION')
.subscribe(() => sendAnalytics()) // subscription is returned so it can be cleaned up
);
Этот вариант использования был бы отличным дополнением к разделу «Рецепты» документации, если у кого-то когда-нибудь будет время, чтобы рассказать о нем.
Кстати, это в основном вопрос RxJS, где поток просто является действиями. Возможно, вы обнаружите, что получаете ответы и лучшую долгосрочную поддержку, если будете искать или формулировать свои вопросы в контексте RxJS, а не в контексте избыточного наблюдения. Почти все вопросы, наблюдаемые с помощью редукции, на самом деле являются вопросами RxJS, и это здорово, потому что знания можно передавать!
person
jayphelps
schedule
09.08.2017
redux-saga
, ниredux-observable
, но я сделал этот конкретный побочный эффект отслеживания, просто вызвав модуль аналитики внутриmapDispatchToProps
, что, на мой взгляд, является законным местом для этого. Итак, до или после вызоваdispatch
вы просто делаете что-то вродеgoogleAnalytics.trackEvent(...)
. - person timotgl   schedule 09.08.2017mapDispatchToProps
функции — неподходящее место для реализации побочных эффектов. - person 1ven   schedule 10.08.2017