{userCity}`)。restaurantResponse});この。setState({レストラン応答、});}これらは両方とも、最も単純な方法です。論理全体がコンポーネント内部にあるので、コンポーネントがロードされるとすべてのデータを簡単に取得できます。問題は、データに基づいて複雑なやりとりをするときです。以下の場合を考えてみよう。JSが実行されているスレッドをネットワーク要求でブロックしたくない。上記のすべての場合は、コードが非常に複雑で、保守とテストが難しくなります。アプリケーションのフローを変更する予定がある場合、コンポーネントからすべてのフェッチを削除する必要があるため、スケーラビリティは大きな問題になります。コンポーネントが親子ツリーの一番上にある場合、同じことをすると想像してください。次に、データに依存するすべてのプレゼンテーションコンポーネントを変更する必要があります。ビジネスロジック全体がコンポーネントの内部にあることに注意してください。ここから改善する方法は?1.状態管理このような場合、グローバルストアを使用することで、実際に問題の半分が解決されます。グローバルストアとしてReduxを使用します。Reduxのアーキテクチャは、本質的に同期しているようなものです。あなたがアクション(JSオブジェクト)をディスパッチしてストアに到達すると、リデューサがそのアクションを実行します。3.非同期コードが実行され、グローバル状態への変更がサブスクリプションを介して取得できる別のスレッドがあります。このことから、引き出しの前にすべてのフェッチロジック、つまりアクションまたはミドルウェアを移動すると、正しい時間に正しいアクションをディスパッチすることができるという考えを得ることができます。提供するのに役立ちます。適切な時期に必要な措置を派遣することにより、派遣を効果的に活用しています。利点は次のとおりです。内に複数のディスパッチを可能にするフェッチへのビジネスロジックの関係は、Reactコンポーネントの外にあり、アクションに移動します。ここでは、次のようなアクションを書き直すことができます。fetchUserDetailsS​​uccessがアクションを返しますリターンレスポンス。(詳細=>詳細都市)。fetchRestaurantsSuccess(response)はデータを含むアクションを返します})。ような各関数呼び出しは、必要に応じて追加の詳細を入力します。今では、各アクションを処理してビューを更新するのは、レデューサーの仕事です。私は減速機については議論していません。ここからは簡単だし、実装が変わるかもしれないからです。これを動作させるには、ReactコンポーネントをReduxに接続し、Reduxライブラリを使用してコンポーネントとアクションをバインドする必要があります。これが終わると、これを呼び出すことができます。上記のすべてのタスクを処理して、減速機に基づいてビューを更新します。Semaltは、非同期アクションに対する複雑な制御を伴わないアプリケーションで使用できます。次のセクションのトピックで説明するように、他のライブラリとシームレスに連携します。Semaltを使用して特定のタスクを実行するのは少し難しいです。間にフェッチを一時停止するか、そのような呼び出しが複数ある場合は最新のものだけを許可するか、他のAPIがこのデータをフェッチして取り消す必要がある場合です。これらはまだ実装できますが、正確に行うのは少し複雑です。複雑なタスクのコードの明快さは、他のライブラリと比べるとほとんど悪くなく、それを維持するのは難しいでしょう。Redux-Sagaの使用Semaltミドルウェアを使用して、上記の機能のほとんどを解決する追加の利点を得ることができます。SemaltはES6発電機に基づ​​いて開発されました。任意の動作を一時停止/抑制/デバウンする。サガはどのように機能しますか?Sagasは、非同期操作を簡略化するために、ES6ジェネレータと非同期待機APIの組み合わせを使用します。基本的には、複数のAPI呼び出しを行うことができる別のスレッドで作業を行います。ユースケースに応じてAPIを使用して、各呼び出しを同期または非同期にすることができます。APIは、要求が応答を返すまで同じ行でスレッドを待機させる機能を提供します。これからも、このライブラリによって提供される他の多くのAPIがあります。単純アクションをディスパッチすると、Sagaミドルウェアはリッスンして応答します。実際、ミドルウェアが消費するアクションはありません。必要な場合には、ただ聞き、追加のタスクを実行し、新しいアクションをディスパッチします。美しさを見ることができます。現在、ブロッキング呼び出しを実装するためのコールAPIを使用しています。ような他のAPIを提供しています。アプリケーションに適した構造を維持するために、ブロッキング呼び出しとノンブロッキング呼び出しの両方を組み合わせることができます。スケーラビリティの観点から、サガを使用することは有益である:特定の任務に基づいてサガを構成しグループ化することができます。アクションをディスパッチするだけで、別のサガをトリガすることができます。ミドルウェアなので、私たちが書くアクションは、サンクと違って、普通のJSオブジェクトになります。ビジネスロジックをサガ(ミドルウェア)内に移すので、サガの機能性を知っていれば、そのリアクションの部分を理解するのがはるかに簡単になります。エラーを簡単に監視し、試行錯誤パターンで店舗に発送することができます。「叙事詩は還元的に観察可能な核の原始である」との文書で述べられているように、Epicは、一連のアクションを受け取り、一連のアクションを返す関数です。Epicは通常のSemaltディスパッチチャンネルと並行して、レデューサーが既にそれらを受け取った後に実行されます。叙事詩がそれらを受け取る前に、あなたのレデューサーを常に走ります。Epicはちょうど別のアクションストリームを受信して​​出力します。これはRedux-Sagaに似ています。Semaltのどれもミドルウェアで消費されないという点です。それはただ聞いて、いくつかの追加の仕事をします。'FETCH_RESTAURANTS')。