redux-sagaのどのへんがSagaなのか
昔に、redux-sagaを使っていた
その当時は、他のメンバーが書いたコードを見様見真似で書いているだけだった
特に理解せずにテンプレみたいにして書いていた
redux-sagaの書き方は、ざっくり記憶している
今更、redux-sagaをちゃんと学ぶモチベーションはない
しかし、Sagaパターンについてはちゃんと理解したい この2つを結びつけるための雑なメモ
この小さいサンプルコードを参考にする
Sagaは、
独立した小さいトランザクションを実行し、それらの連携で大きなトランザクションを作る
というパターン
色々な手法があるが、Event駆動で実装できる
各トランザクションはイベントを生成する
そのイベントによって、次のトランザクションをトリガーする
各トランザクションに、Compensating Transactionを定義する
失敗時のトランザクションの定義
これが「小さいトランザクション」に相当する
code:sagas.js
function* fetchUser(action) {
try {
const user = yield call(Api.fetchUser, action.payload.userId)
yield put({ type: 'USER_FETCH_SUCCEEDED', user: user }) // ①
} catch (e) {
yield put({ type: 'USER_FETCH_FAILED', message: e.message }) // ②
}
}
①が成功時の次のeventの発行
②がCompensating Transactionのためのeventの発行
event駆動のアプローチ
code:saga.js
function* mySaga() {
yield takeEvery('USER_FETCH_REQUESTED', fetchUser)
}
export default mySaga
ここで、eventとtransactionを結びつけている
USER_FETCH_REQUESTEDというeventが発行されたら、
fetchUserというtransactionをトリガーする