Понимание карты слияния в redux Epic

#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
изображение