私は人々が自分の反応+還元アプリケーションでネットワークコールをどのように整理するかのベストプラクティスと考えられるものについていくつかの考えを得ようとしています。私は通常、コンポーネントが呼び出しを行い、データを取得し、それを減らすアクションに渡します。これはベストプラクティスですか、それとも、ネットワークからコンポーネントを分離し、そのロジックをアプリのどこかに置いてください。react + reduxアプリケーションでネットワークコールを行う場所
答えて
あなたのアクションクリエイターには、ネットワーク通話に最適な場所があります。しかし、あなたはその仕事を最も良くするためにいくつかのミドルウェアが必要になります。このpromise-middlewareを見てください(実際には、チュートリアル全体をチェックすることをお勧めします)。そのミドルウェアを使用する場合は、約束を返すアクションクリエイターを持つことができます。また、3つのアクションタイプ(1つはリクエスト用、もう1つは成功したレスポンス用、もう1つは失敗したリクエストを処理する)を持つことができます。それであなたはあなたのレデューサーの3つの行動を聞くだけです。
だからミドルウェアで、あなたはこのようなアクションの作成者を持つことができます:
明らかfunction networkCall() {
return {
types: ['MAKE_REQUEST', 'REQUEST_SUCCESS', 'REQUEST_FAILURE'],
promise:() => {
return new Promise((resolve, reject) => {
$.ajax({
url: 'example.com/api'
type: 'GET'
});
})
}
}
}
あなた自身の約束ミドルウェアを構築するのは自由ですが、それは正しい方向にあなたを設定する必要があります。
私はかなりredux tutorials for Async Actionsのアクションのパターンに従います。コンポーネントとストア/レデューサーの両方から離れて、すべてのアクションを非同期にすることは、私にとって最も理にかなっています。
また、Redux Crudを使用して、ネットワーク操作に関連する操作を標準化します。
redux-api-middleware
などのAPIミドルウェアを使用できます(write oneにはあまり難しくありません)。
{type: 'API_GET', url: '/api/userList', nextType: 'USER_LIST'}
のようなアクションを返すことができます...それは、後に実際の要求を送信し、その後のような新しいアクションをディスパッチうミドルウェアによって処理される
{type: 'USER_LIST_FETCHED', status: 200, payload: [{id: 1, ...}, ...]}
{type: 'USER_LIST_FAILED', status: 404, payload: {message: '...'}}
これはAngularで正しく行われたことの1つだと思います。 services
には、すべてのネットワーク通話がきれいに配置されています。これはReduxで簡単に行うことができます。
ドキュメントでは、ネットワーク通話がactions
にあることを正しく示唆しています。私はそれらを別の場所に分解したいと思っています。あなたはそれを「サービス」と呼ぶことができます。ここでは、APIサーバーのURL、認証関連のものなどのすべての定数を定義します。これは、ネットワーク呼び出しの実装の詳細を認識する唯一の場所です。これは、使用するライブラリ(jQuery、Axios、等)。
アクションファイルは、これらのサービスから関数をインポートして呼び出します。ネットワークライブラリを交換することを後で決める場合は、actions
を変更する必要はありません。
- 1. React&Reduxアプリケーション設計
- 2. react/reduxアプリケーションでの認証エラー
- 3. モデル固有のビジネスロジックをReduxアプリケーションに配置する場所
- 4. React Reduxアプリケーションでサーバーから初期データを取得する場所はどこですか?
- 5. Isomorphic Reduxアプリケーションでcookieを設定する場所は?
- 6. React + Redux connect(mapStateToProps)
- 7. React v0.12.2でReduxを使用
- 8. ReduxとReact-Reduxを使用している場合、Reactコンポーネントの状態は必要ありませんか?
- 9. React-native Redux socket.ioセッション認証
- 10. React、Redux、およびImmutable
- 11. react/reduxでのアクションとレデューサーの共有
- 12. React/Reduxフォームでの提出の処理
- 13. react/reduxアプリケーションのサービスインスタンスはどこに保持されますか?
- 14. 同形(React/Redux/Express/Mongo)アプリケーションのデータモデルとビジネスロジック
- 15. Railsプロジェクトにreact-reduxをインストールする
- 16. これを行う場所?
- 17. React/Redux Redux-Form更新用の事前入力フォーム
- 18. コンポーネントベースのReact-Reduxプロジェクトのディレクトリ構造
- 19. React + Redux:コンポーネントが更新されない
- 20. tableviewcontrollerで初期化を行う場所
- 21. ASP.NETで認証チェックを行う場所
- 22. React Reduxで状態ツリーをモデル化する
- 23. ReactでRedux - コンポーネントとストアを共有する正しい方法
- 24. React + Reduxでフォームフィールド値を動的に設定
- 25. React/Reduxで兄弟コンポーネント間のスクロール状態を管理する
- 26. React/ReduxでAPIを使用する正しい方法
- 27. Reactとreduxで別のレデューサーからアクションを呼び出す
- 28. React要素をRedux状態で格納する:anti-pattern?
- 29. OutOfBoundsException。境界チェックを行う場所
- 30. React-reduxストアの更新はありませんReactはありません