JavaScript アプリケーションの状態管理ライブラリである Redux は、同期データ フローをサポートすることで知られています。ただし、非同期リクエストを処理するには、Redux Thunk や Redux Promise などのミドルウェアを使用する必要があります。
デフォルトでは、Redux は同期データ フロー モデルで動作します。アクション作成者が状態の変化を記述するオブジェクトを返すことを期待します。これにより、状態更新の一貫性と予測可能性が保証されます。ただし、サーバーからデータを取得するなどの非同期操作を実行する場合、結果をすぐに返すことは現実的ではありません。
Redux での非同期操作を容易にするために、ミドルウェアが導入されています。 。ミドルウェアは、ストアにディスパッチされたアクションをインターセプトし、HTTP リクエストの作成や時間のかかる計算の実行などの副作用の処理を可能にします。ミドルウェアを使用すると、アクション作成者は非同期操作を開始し、後でその結果をアクションとしてディスパッチできます。
ミドルウェアには、Redux 状態を非同期に管理する際にいくつかの利点があります。
非同期フィールド更新をシミュレートする単純な Redux アプリを考えてみましょう。 AsyncApi クラスの使用:
const App = (props) => { const update = () => { dispatch({ type: 'STARTED_UPDATING', }); AsyncApi.getFieldValue() .then((result) => dispatch({ type: 'UPDATED', payload: result, })); }; // ... };
このアプローチは技術的には機能しますが、煩雑になります。コンポーネント ロジックは非同期処理を使用するため、保守性が低くなります。
Redux Thunk または Redux Promise ミドルウェアを使用すると、同じコードを簡素化できます。
const App = (props) => { const update = () => { dispatch(loadData(props.userId)); }; // ... }; const loadData = (userId) => (dispatch) => { fetch(`http://data.com/${userId}`) .then((res) => res.json()) .then( (data) => dispatch({ type: 'UPDATED', payload: data }), (err) => dispatch({ type: 'FAILURE', payload: err }), ); };
非同期ロジックをアクション クリエーターに分離することにより、コンポーネントは操作の非同期の性質を認識しません。アクションをディスパッチするだけで、残りはミドルウェアが処理します。
技術的には可能ですが、Redux でミドルウェアを使用せずに非同期操作を処理することはお勧めできません。これにより、複雑さとメンテナンスのオーバーヘッドが生じます。ミドルウェアは、副作用を管理するための標準化されたアプローチを提供し、Redux アプリケーションの非同期データ フローを効率的、便利、かつテスト可能にします。
以上がRedux で非同期操作にミドルウェアを使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。