一般的な抽象化: エフェクト
一般論として、Saga 内から副作用をトリガーするのは、常に宣言的エフェクトを生成することです。(Promise を直接生成することもできますが、最初のセクションで見たように、これによりテストが困難になります。)
Saga が実際に行うのは、望ましい制御フローを実装するためにそれらのエフェクトをすべてまとめて構成することです。最も基本的な例は、生成されたエフェクトを順番に並べて実行することです。馴染みのある制御フロー演算子(if
、while
、for
)を使用して、さらに洗練された制御フローを実装することもできます。
call
と put
のようなエフェクトを takeEvery
などの高レベル API と組み合わせて使用することで、redux-thunk
と同じことを達成できるが、容易にテストできるというメリットが得られることがわかりました。
しかし、redux-saga
は redux-thunk
と比べて別の利点も提供します。拡張セクションでは、依然として同じテストの利点は得られるものの、複雑な制御フローを表現できる、さらに強力なエフェクトについて説明します。