免責事項:私はredux-observableの作成者の1人なので、100%公平であるのは難しいです。
現時点では、redux-observableがredux-sagaよりも優れている理由を提供していません。なぜなら、そうではないからです。😆
tl; dr両方の長所と短所があります。多くの人は一方が他方よりも直感的であると感じますが、RxJS(redux-observable)またはgenerators / "effects as data"(redux-saga)がわからない場合、両方を異なる方法で学習するのは複雑です。
それらは非常に類似した方法で同じ問題を解決しますが、十分に使用したときに初めて明らかになるいくつかの根本的な違いがあります。
redux-observableは、ほとんどすべてを慣用的なRxJSに委ねます。したがって、RxJSの知識がある(またはそれを得る)場合、redux-observableの学習と使用は非常に自然なことです。これはまた、この知識がredux以外のものに転送可能であることを意味します。MobXへの切り替えを決定した場合、Angular2への切り替えを決定した場合、将来のホットネスXへの切り替えを決定した場合、RxJSが役立つ可能性が非常に高くなります。これは、RxJSが一般的な非同期ライブラリであり、多くの点でプログラミング言語自体、つまり「リアクティブプログラミング」パラダイム全体に似ているためです。RxJSは2012年から存在し、Rx.NETのポートとして開始されました(ほぼすべての主要言語に「ポート」があり、非常に便利です)。
redux-sagaは時間ベースのオペレーター自体を提供するため、このプロセスマネージャースタイルでのジェネレーターと副作用の処理について習得した知識は伝達可能ですが、実際のオペレーターと使用法は他の主要なライブラリでは使用されません。ですから、それは少し残念なことですが、それだけで取引のブレーカーになるべきではありません。
また、「データとしての効果」(ここで説明)を使用しますが、最初は頭を一周するのは難しいかもしれませんが、redux-sagaコードは実際には副作用自体を実行しません。代わりに、使用するヘルパー関数は、副作用を実行する意図を表すタスクのようなオブジェクトを作成し、内部ライブラリがそれを実行します。これにより、モックする必要がなく、テストが非常に簡単になり、一部の人々にとって非常に魅力的です。ただし、個人的には、ユニットテストがサガのロジックの多くを再実装することを意味します-これらのテストをあまり役に立たないIMOにします(この意見は全員に共有されるわけではありません)
人々はよく、なぜredux-observableでそのようなことをしないのかと尋ねます:私にとって、それは通常の慣用的なRxと根本的に互換性がありません。Rxでは、.debounceTime()
デバウンスに必要なロジックをカプセル化するような演算子を使用しますが、実際にはデバウンスを実行せず、代わりにインテントでタスクオブジェクトを放出するバージョンを作成したい場合は、操作の実際の結果ではなく、オペレーターがそのタスクオブジェクトを操作しているため、オペレーターをチェーンすることができないため、Rxのパワー。これを上品に説明するのは本当に難しいです。アプローチの非互換性を理解するには、Rxを深く理解する必要があります。あなたが本当にそのようなものを望んでいるなら、redux-cyclesをチェックしてくださいこれはcycle.jsを使用し、主にそれらの目標を持っています。私の好みにはあまりにも多くの儀式が必要だと思いますが、興味があれば試してみることをお勧めします。
ThorbenAが述べたように、私はredux-sagaが現在(10/13/16)reduxの複雑な副作用管理の明確なリーダーであることを認めることをためらいません。それは以前に開始され、より堅牢なコミュニティがあります。したがって、ブロックの新しい子供よりも事実上の標準を使用することに多くの魅力があります。どちらかを事前の知識なしに使用すると、混乱を招くと言っても安全だと思います。どちらもかなり高度な概念を使用しており、一度「取得」すると、複雑な副作用の管理がはるかに容易になりますが、それまでは多くの問題がありました。
私が与えることができる最も重要なアドバイスは、必要になる前にこれらのライブラリのどちらも持ち込まないことです。単純なajax呼び出しのみを行う場合は、おそらく必要ありません。redux-thunkは学習するのが簡単で愚かであり、基本を十分に提供しますが、非同期が複雑になるほど、redux-thunkはより難しくなります(または不可能にさえなる)。しかし、多くの点でredux-observable / sagaにとって、非同期がより複雑であるほど、それは最も輝きます。同じプロジェクトでredux-thunkを他の1つ(redux-observable / saga)と一緒に使用することには多くのメリットもあります!一般的な単純なものにはredux-thunkを使用し、複雑なものにはredux-observable / sagaのみを使用します。これは生産性を維持するための優れた方法であるため、redux-thunkで取るに足らないことについてredux-observable / sagaと戦うことはありません。