#reactjs #redux #react-redux #rxjs
#reactjs #redux #реагировать-redux #rxjs
Вопрос:
Мне было интересно, может ли кто-нибудь помочь мне понять этот фрагмент кода (из официальных документов redux)
const fetchUserEpic = action$ => action$.pipe(
ofType(FETCH_USER),
mergeMap(action =>
ajax.getJSON(`https://api.github.com/users/${action.payload}`).pipe(
map(response => fetchUserFulfilled(response))
)
)
);
Я знаю, что такое Epics (действия в, действия из и т.д.) И понимаю, что действия будут проходить через action$.pipe
, А затем вы выбираете тот, который вы хотите через ofType
, и они должны возвращать другое действие.
Однако у меня возникли проблемы с пониманием того, что происходит после вызова mergeMap.
Из того, что я понимаю (что, возможно, очень неправильно), карта слияния сгладит и объединит внешнюю наблюдаемую (в данном случае action$
) с внутренней наблюдаемой (в данном случае вызов для получения json). Из внутренней наблюдаемой мы создаем конвейерную карту, которая будет принимать данные из вызова api и использовать их для вызова следующего действия.
Я чувствую, что здесь чего-то не хватает, и не понимаю наблюдаемый поток. Я прочитал официальные документы, но у меня возникли проблемы с полным пониманием этого.
Комментарии:
1. learnrxjs.io/learn-rxjs/operators/transformation/mergemap
2. Да, я прочитал это, однако мне не ясно, как это работает в контексте epic выше.
3. Сначала вам действительно нужно понять rxjs.
4. rxmarbles.com это отличный ресурс для визуализации функций rx.
Ответ №1:
actions$
представляет собой поток всех действий, ofType(FETCH_USER)
фильтрует поток так, чтобы проходили только действия FETCH_USER. Карта слияния выполняет действие FETCH_USER, выполняемое потоком, и возвращает наблюдаемое значение, которое будет выдано после завершения http-запроса. Функция map в http-запросе сопоставляет ответ на http-запрос с другим действием.
Комментарии:
1. Спасибо, это было очень хорошее объяснение, которое мне очень помогло
Ответ №2:
map
и flatten
в единый Observable