小编典典

从其他史诗中调用史诗

reactjs

首先,这个强大的图书馆有很多道具!我仍然在用例中挣扎。我想先调用另一个史诗,等到完成后再继续当前史诗。假设我有一个用户可以更改内容的表单。在将其他数据加载到表单之前,我想先保存当前更改。有什么想法吗?


阅读 300

收藏
2020-07-22

共1个答案

小编典典

听起来像是您想要的:如果一部史诗想要开始另一部史诗作品,并等待其完成再继续。

一种方法是(使用伪名称),当您收到初始操作时,LOAD_OTHER_DATA您会立即开始侦听单个SAVE_FORM_FULFILLED,这表明表单已保存(稍后将开始)。收到后,我们mergeMap(或switchMap在这种情况下无关紧要)将其加载到调用中以加载其他数据loadOtherDataSomehow()并进行常规业务。最后,启动我们正在等待的表单的实际保存的窍门是startWith()在整个链的末尾添加一个-
它将发出并分派实际保存表单的操作。

const saveFormEpic = (action$, store) =>
  action$
    .ofType('SAVE_FORM')
    .switchMap(() =>
      saveFormSomeHow(store.getState().formDataSomewhere)
        .map(details => ({
          type: 'SAVE_FORM_FULFILLED'
        }))
    );

const loadOtherDataEpic = action$ =>
  action$
    .ofType('LOAD_OTHER_DATA')
    .switchMap(() =>
      action$.ofType('SAVE_FORM_FULFILLED')
        .take(1) // don't listen forever! IMPORTANT!
        .mergeMap(() =>
          loadOtherDataSomeHow()
            .map(otherData => ({
              type: 'LOAD_OTHER_DATA_FULFILLED',
              payload: otherData
            }))
        )
        .startWith({
          type: 'SAVE_FORM'
        })
    );

您没有提到加载和保存的工作方式,因此这只是您需要针对用例进行修改的伪代码。

2020-07-22