あなたはそれをredux-sagaで行うことはできません。あなたがそこでやろうとしていることは、レフレックス・サガの基本原則に反しています。だから他のサガ(take
を使用して、通常は「ウォッチャー」)
redux-saga
は...あなたのアプリで何が起こっているかを説明するイベントなどのアクションを処理することにより反応性であることを目指していたりrootReducerは、それらのアクション/イベントをサブスクライブし、どのような彼らを行うことができます実行する必要があります...そのための
redux-saga
-unlike redux-thunk
とredux-promise
こと - あなたは、あなたが派遣派遣、および減速時にReduxのサガで、だから... ... dispatch
メソッドの動作を変更しない とサガはディスパッチされたアクションにサブスクライブされます。しかし、dispatch
メソッドは、他のミドルウェア/ストアエンハンサーを使用するときに起こるような約束を返すことはありません。
redux-saga
は、フォームのリクエストが完了したことをアプリの残りの部分に知らせる唯一の方法は、そのリクエストが終了するかエラーが発生するたびに(put
効果を使用して)アクションをディスパッチすることです。したがって、特定のアクションがディスパッチされた場合、どのようにコンポーネントの内部から直接知ることができますか?
コンポーネントを使用して独自のミドルウェアを作成する(または別のコンポーネントを使用する)場合を除き、コンポーネント内の具体的なアクションにサブスクライブする方法はありません。
あなたはreduxストアを保留にするために直接コンテキストにアクセスでき、the redux subscribe
methodを直接使用できますが、リスナー機能はディスパッチされたアクションを教えてくれません。アクション(任意のアクション)がディスパッチされたときに呼び出されます...州の一部のプロパティが変更されているかどうかを確認できますが、それは気違いです。それで、あなたが狂っているそのルートを下りたいと思わない限り、あなたはそれをredux-sagaを使って行うことはできません。
(IMHOはあまり良い考えではありませんが)何かをしたいのなら、あなたはredux-sagaを使わないとやらなければなりません。
handleFormSubmitted() {
this.setState({ isSaving: true })
yourFetchCall({ formData: this.props.formData })
.then(payload => this.props.dispatchFormSaved(payload))
.catch(error => this.props.dispatchSavingFormErrored(error))
.finally(() => this.setState({ isSaving: false }))
}
Reduxのサガを使用しての全体のポイントは、ここでの発送からの応答を聞くことの代わりに、あなたはおそらくにフラグを設定する必要があり、サイドeffects' 'についてです:それはの線に沿って何か可能性が行うことが可能な方法ストアを保存し、フラグをストア状態からローカルの小道具にマップし、必要に応じてスピナーをレンダリングします。サガがリクエストを完了すると、フラグがリセットされ、ストアが更新され、マップ関数を介して更新されたローカルの小道具がトリガされ、それに応じてコンポーネントが更新されます。 – Takahiro
amen @ Takahiro!私を殺した文章は、「私は実際に私の店にローカルコンポーネントの状態を保存したくない」ということです。 – Josep
@Josep、その理由は、ポストが反パターンとして捧げられた理由です。 :)フェッチ状態は間違いなく「副作用」の「ローカル」状態ではありません。 :-p – Takahiro