2017-12-19 21 views
0

、私はその良い習慣を聞いた:あなたはHTTPリクエストからアプリケーションにデータを追加する必要がある場合

  1. @Effectを活性化させる作用が、派遣します。
  2. @Effectは、httpリクエストからデータをフェッチします。
  3. 次に、が別のアクション
  4. に更新され、ストアが最後に更新されます。

これは、httpコールが副作用であるため、@ngrx/effectsライブラリで処理する必要があるためです。

これは良いですか? 最初にアクションが送信されると、その問題が成功したか失敗したかはわかりません。私が知る唯一の方法は、私のStateに "hasErrorHappened"のようなものがあるかどうかです。そして、私はそのようなプロパティが

良いことであるか、それはに優れてたとは思わない:

  1. データを取得httpコール、
  2. アップデートにサービス後の店舗を行うサービスを作成します。そのデータで
+1

これはあなたにとって参考になるはずです。https://stackoverflow.com/questions/39552067/what-is-the-purpose-of-ngrx-effects-library/39626187#39626187 私はngrxの専門家ではなく、まだ学習していません私は、すべてのシナリオに対して3つのアクションを作成するこのアプローチが好きです。一方はディスパッチされ、もう一方は失敗または成功です。最初のディスパッチのアクションタイプをリッスンし、switchMapを使用して成功または失敗の場合に切り替えます。 – stojevskimilan

答えて

-2

はい、あなたはそうします!

エラー処理のために別のアクションを追加するだけで、3つのアクションが完了します。

例: ADD_TODO ADD_TODO_SUCCESS ADD_TODO_FAILED

+0

この場合、エラーメッセージを表示したい場合はどうなりますか? 'ADD_TODO_FAILED'は状態を正しく更新しますか?これは、 "errorMessage"というプロパティを追加します: "My Error here"。私はこれを購読してメッセージを表示します。私は新しいページをクリックしてから、同じページに戻ってクリックします。何ですか?エラーはまだそこにある!!ああ! 'ngOnDestroy()'に 'REMOVE_TODO_ERROR'という** NEW **アクションを作成する必要があります。これは受け入れがたい。 – Dolan

0

私はそれはあなたが効果がなかったことを知ってほしい理由に依存だと思います。ユーザーに要求が失敗したことだけを伝えたい場合は、実際にアクションを送信したコンポーネントでタイムアウトを使用するか、ユーザーに明示的にエラーを表示したい場合は、常に良いアイデアではありません。実際にlastErrorを追加して、コンポーネントがレスポンスを待っている間にそれをリッスンすることができます。ストアがアプリケーションの状態を反映する必要があり、発生したエラーがこの状態の一部である可能性があるため、lastErrorプロパティが2番目のケースでは悪いとは思わない。

関連する問題