2

RxJSを使用して行を削除する前に、確認モーダルを表示しようとしています。

  • 1行削除すると、以下のコードは正常に機能します。
  • 2行目を削除すると、 deleteLineFulfilled2回呼び出されます。
  • 3行目を削除するdeleteLineFulfilledと、3回呼び出されます...

理由はありますか?

const deleteLineEpic = (action$, store) =>
action$.ofType(DELETE_LINE_REQUEST)
    .flatMap((action) => Observable.merge(
                Observable.of(showModalYesNo('CONFIRM_DELETE')),
                action$.ofType(MODAL_YES_CLICKED).map(() =>
                    deleteLineFulfilled(action.line)
                )
                .takeUntil(action$.ofType(MODAL_NO_CLICKED))
           ));
4

2 に答える 2

3

action$は永続的なオブザーバブルであり、タイプのアクションがディスパッチされたときにのみ停止MODAL_NO_CLICKEDします。コードからは、それがいつ発生するかを判断するのは難しいため、 . の.take(1)前にを追加する必要があります.takeUntil(...)


ただし、このアーキテクチャでは、またはが発行される必要があり、発行がスキップできないことを確認する必要があります。MODAL_YES_CLICKEDMODAL_NO_CLICKED

より簡単な方法は、確認ダイアログを実装し、結果をサブスクライブしてから、結果があった場合にのみ削除アクションをディスパッチし、結果がYESアクションNOをディスパッチしないことです。そうすれば、はるかにクリーンなアクション エピックを作成できます。

于 2016-12-21T17:42:12.873 に答える