私はAPIコール用のredux-apiミドルウェアと副作用のためのredux-sagasを使用しています。特定のフォームフローの場合、ユーザーは2つの異なる変更を行うことができ、別々のapiで処理する必要があります。そして、もし彼らの1人が失敗すれば、サガ全体が失敗するはずです。私は失敗を扱う別々のサガを持っています。 場合によっては、これが壊れます。デベロッパーツールを見ると、サガは2回実行され、最初のステップにジャンプしてから、再びステップを実行します。私はこれをコメントとしてマークしました。redux-sagasで 'take'を使って進行を待つことはできますか?佐賀のフローは、そのように使用されるとサガの前のポイントに戻る
function* saveFormChanges(action) {
// point (1)
if (action.changesA) {
yield put(changesAApi());
// jumps to point (1) the first time
yield take('changes-A-success');
// point (2)
}
if (action.changesB) {
yield put(changesBApi());
// jumps to point (2)
yield take('changes-B-success');
// point (3)
}
// jumps to point (3)
yield call(displaySuccessMessage);
}
function* errorSaga() {
yield takeLatest(action => /failure$/.test(action.type),() => {
alert('failure');
});
}
はこれです -
アクション - -
function changesAApi() {
return (dispatch, getState) => {
dispatch({
[CALL_API]: {
types: ['changes-A', 'changes-A-success','changes-A-failure'],
endpoint: '/changesA',
method: 'post',
}
})
}
}
// can be called individually, but state in A affects this call
function changesBApi() {
return (dispatch, getState) => {
dispatch({
[CALL_API]: {
types: ['changes-B', 'changes-B-success','changes-B-failure'],
endpoint: '/changesB',
method: 'post',
}
})
}
}
サガサガをトリガーアクションのthatsは一度だけ
ここでモックコードだ(Reduxの開発ツールで検証)を実行していますこの流れを作る正しい方法は?これを行うより良い方法はありますか?