あなたotherEpic
は無限の「ループ」です(時間の経過とともに)
const otherEpic$ = action$ =>
action$
.delay(1000)
.mapTo({ type: OTHER });
この叙事詩には、「アクションがまったく受信されたら、1000ミリ秒待ってから、タイプの別のアクションを発行するOTHER
」という動作があります。store.dispatch
そして、エピックが発行するアクションは他のアクションと同様に通常のサイクルを通過するため、最初のアクションPING
が受信されたOTHER
後、1000 ミリ秒後に が発行され、同じエピックによって再帰的に受信され、さらに 1000 ミリ秒待ってから別の OTHER
アクションが発行されます。 、永遠に繰り返します。
これが知られていたかどうかはわかりませんが、指摘したかったのです。
rootEpicが実行を開始する前、またはサブスクライブされる前next()
の BehaviorSubject に入ります。epic$
BehaviorSubjects は最後に発行された値を保持し、誰かがサブスクライブするとすぐにそれを提供します。rootEpicはまだミドルウェアによって呼び出されてサブスクライブされていないため、初期値を置き換えているため、 のみが発行され、実行されます。otherEpic
epic$.mergeMap
非同期/バンドル分割を使用する実際のアプリケーションでは、ミドルウェアが rootEpic をサブスクライブしepic$.next(newEpic)
、.BehaviorSubject
その動作のデモは次のとおりです: http://jsbin.com/zaniviz/edit?js,output
const epic$ = new BehaviorSubject(combineEpics(epic1, epic2, ...etc));
const rootEpic = (action$, store) =>
epic$.mergeMap(epic => {console.log(epic)
return epic(action$, store)
});
const otherEpic = action$ =>
action$.ofType(PONG)
.delay(1000)
.mapTo({ type: OTHER });
const epicMiddleware = createEpicMiddleware(rootEpic);
const store = createStore(rootReducer,
applyMiddleware(loggerMiddleware, epicMiddleware)
);
// any time AFTER the epicMiddleware
// has received the rootEpic
epic$.next(otherEpic);
ドキュメントには、この例で「しばらくしてから」と書かれていますが、今では十分に明確ではありません。これをさらに明確にしようと思います。
Webpack の分割で react-router を使用している場合は、エピックの非同期読み込みに関するこの他の質問も役立つ場合があります。require.enquire()
これらのいずれかをさらに明確にすることができるかどうか教えてください