私はページを使ったアンケートであるreduxアプリケーションを持っています。ページを変更するには、NAVIGATION_NEXT_PAGEアクションが必要です。次に、Reducersはストア内の新しいページの作成を処理します。私は質問の回答を設定したり、ページをナビゲートする他のアクションがあります。 NAVIGATION_NEXT_PAGEで表示されるすべての新しいページには、ページが最初に表示されたときや質問に答えられたときに実行されるユーザー定義アクションのリストがあります。他のアクションの結果からアクションをキューに入れる方法
私の問題は、アクションロジックをコンポーネントから切り離しながら、新しいページが表示されるたびに再帰的にアクションをディスパッチすることです。アクションがスキップするように要求した場合は、ページを表示したくないので、私はPageContainerにアクションをディスパッチしたくありません。
これは私の現在のソリューションです:
const actionMiddleware = (store) => (next) => (action) => {
// Execute post answer actions on the current page.
switch (action.type) {
case types.NAVIGATION_NEXT_PAGE:
for (let postAnswerAction of store.getState().postAnswerActions);
next(store.dispatch(actionFromPageAction(postAnswerAction)))
break;
}
// Evaluate the action.
let result = next(action);
// Execute the preload actions of the new page.
switch (action.type) {
case types.NAVIGATION_NEXT_PAGE:
for (let preLoadAction of store.getState().preLoadActions);
next(store.dispatch(actionFromPageAction(preLoadAction)))
break;
}
return result;
};
しかし、時には、私のUIを更新しない反応として、それは奇妙な行動を紹介しています。多分、私のミドルウェアが反応を遅らせるのでしょうか?
私は正しい軌道に乗っています。私のミドルウェアからアクションをディスパッチする正しい方法は何ですか?
他のライブラリをチェックアウトするのではない場合、[redux-observable](https://github.com/redux-observable/redux-observable)はrxjs 'Observables'の力でこれ以上のことをします。これは本質的に、あなたのアクションを1つの 'Observable'ストリームにラップし、あなたはそれらをepicsと呼ばれる関数で変換することができます。また、ミドルウェアを追加する必要はありません。ミドルウェアは、はるかに一般的なレベルで動作するはずです。 –
私は非同期機能は必要ないので、RxJSに依存しない代替手段がありますか?依存関係を限定するため。 –
以下の回答を追加しました。慎重に読んでください。店内での行動を維持することは、実際には良い習慣のようには見えません。 –