2016-09-30 7 views
2

他のアクションを非同期的に出すアクションをディスパッチすることを奨励するこれらのミドルウェアをすべて見ると、私は狂った薬を飲んでいるように感じます。私は非同期CAN(と多分すべき?)が店の前に行われると思います。なぜミドルウェアの中のObservablesを扱うのか - Observablesの組み合わせの出力をディスパッチするのか?

Rxのメリットは、着信ストリームを受け取り、その一部を他のアクションの観測可能なものにマップし、結果全体をマップして一連のイベントを取得できることです。次に、各イベントをイベントにディスパッチすることによって、結果のストリームをストアにチェーンすることができます。

アクション内に非同期を置くだけで、Reduxのシンプルなモデルを採用し複雑になるだけでなく、タイムトラベルのデバッグで新しいAJAXリクエストが発生する可能性があります。スクラブ?)。

私はRxJSの力を店の前に置いているような気がしますが、私にはかなりの意味がありますが、なぜライブラリを入れるのかが混乱しています。 店舗側です。 ObservablesはEpicsの素晴らしいモデルだと私は同意しますが、Reduxは決して知らないべきことを気にしているのだろうかと思います。

背景:私はこのビデオを見ましたhttps://www.youtube.com/watch?v=AslncyG8whg、数年の間にRxを学んできました。Reduxは半年です。

答えて

2

ストアエンハンサーが互いにラップします。 Reduxのcompose関数を使用すると、作成に渡されたエンハンサーは右から左に並べられます。したがって、const storeEnhancer = compose(applyMiddleware(...middlewares), DevTools.instrument())を使用すると、DevToolsエンハンサーが実際のストアをラップし、ミドルウェアエンハンサーがDevToolsエンハンサーをラップします。

これは、タイムトラベルのデバッグでは、すべてのミドルウェアから取得したアクションのみを使用し、それらのアクションを再生してもミドルウェアチェーンを経由しないことを意味します。つまり、実際にストアに影響を与えたアクションだけが再生されます。

考慮すべき他の事は、ミドルウェアのようなものは、派遣や状態を確認する目的のために店のAPIへのアクセスを許可することで、「内部」店舗と考えることができますが、最終的には鍵がそれらが処理されるということです「実際の」ストア自体の上のレイヤーです。

ダンのミドルウェアと非同期動作に関する優れた書き方をお読みください。How to dispatch a Redux action with a timeout?Why do we need middleware for async flow in Redux?は、ミドルウェアの理由とその他のリンクと説明をhttp://redux.js.org/docs/FAQ.html#actions-side-effectsで明確にするのに役立ちます。

+0

ありがとうございます@markerikson - 参考になるポインタ! –

関連する問題