Как конвертировать Redux Saga в Observable - PullRequest
0 голосов
/ 18 января 2019

Я должен погрузиться в Redux-Observable, и моя битва - конвертировать саги

function* loadTabs(action) {
  const tabs = yield call(api.fetchTabs)
  yield put(actions.setTabs(tabs))
  const tabId = tabs[0].id
  yield put(actions.selectTab(tabId))
  yield put(actions.loadWidgets(tabId))
}

function* loadWidgets({ tabId }) {
  const widgets = yield call(api.fetchWidgets, tabId)
  yield put(actions.setWidgets(widgets))
  yield put(actions.setDashboardReady(true))
}

/* WATCHER */
function* mySaga() {
  yield takeEvery(types.TABS_REQUESTED, loadTabs)
  yield takeEvery(types.WIDGETS_REQUESTED, loadWidgets)
}

в эпос. То, что я сделал, это

const loadTabs = (action$, state$) => action$.pipe(
  ofType(types.TABS_REQUESTED),
  mergeMap(() => api.fetchTabs()),
  map(tabs => actions.setTabs(tabs))
)

const loadWidgets = action$ => action$.pipe(
  ofType(types.WIDGETS_REQUESTED),
  mergeMap(() => api.fetchTabs()),
  map(widgets => actions.setWidgets(widgets)),
)

const rootEpic = combineEpics(loadTabs, loadWidgets)

«Цепочка отправки» должна быть «TABS_REQUESTED> setTabs> selectTab> loadWidgets> setDashboardReady». Я остановился с 'TABS_REQUESTED> setTabs'

Пожалуйста, пни меня вперед с пропущенными частями. Я просто перегружен руководством прямо сейчас. Спасибо.

1 Ответ

0 голосов
/ 18 января 2019

Это как затмение. Остановитесь, подумайте о действиях потоков в / действиях и попробуйте снова ..

Итак, я сделал это так

const loadTabs = (action$, state$) => action$.pipe(
  ofType(types.TABS_REQUESTED),
  mergeMap(() => api.fetchTabs()),
  switchMap(tabs => [
    actions.setTabs(tabs),
    actions.selectTab(tabs[0].id),
    actions.loadWidgets(tabs[0].id)
  ])
)

const loadWidgets = action$ => action$.pipe(
  ofType(types.WIDGETS_REQUESTED),
  mergeMap(() => api.fetchWidgets()),
  switchMap(widgets => [
    actions.setWidgets(widgets),
    actions.setDashboardReady(true)
  ]),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...