React Thunk は、アクション オブジェクトの代わりに関数を返すアクション クリエーターを作成できるミドルウェアです。これは、API リクエストや複雑な同期ロジック (アクションの条件付きディスパッチなど) などの非同期操作を処理する場合に便利です。返された関数は引数としてdispatchとgetStateを受け取り、他のアクションをディスパッチしたり、関数内の現在の状態にアクセスしたりすることができます。
React アプリで redux-thunk を使用する基本的な例を次に示します:
// Action Creator with Thunk export const fetchUser = () => { return async (dispatch) => { dispatch({ type: 'FETCH_USER_REQUEST' }); try { const response = await fetch('/api/user'); const data = await response.json(); dispatch({ type: 'FETCH_USER_SUCCESS', payload: data }); } catch (error) { dispatch({ type: 'FETCH_USER_FAILURE', payload: error }); } }; };
React Saga は、ジェネレーター関数を使用して副作用をより体系的に処理できるようにするミドルウェアです。サンクのような関数を返す代わりに、「エフェクト」システムを使用して非同期操作を管理し、ロジックのフローを制御します。 Saga は、ディスパッチされたアクションをリッスンし、API 呼び出し、データのフェッチ、その他のタスクなどの副作用を実行できる、長時間実行されるバックグラウンド プロセスです。
redux-saga の基本的な使用例を次に示します:
import { call, put, takeLatest } from 'redux-saga/effects'; // Worker saga: will be fired on FETCH_USER_REQUEST actions function* fetchUser(action) { try { const response = yield call(fetch, '/api/user'); const data = yield response.json(); yield put({ type: 'FETCH_USER_SUCCESS', payload: data }); } catch (e) { yield put({ type: 'FETCH_USER_FAILURE', message: e.message }); } } // Watcher saga: spawns a new fetchUser task on each FETCH_USER_REQUEST function* mySaga() { yield takeLatest('FETCH_USER_REQUEST', fetchUser); } export default mySaga;
側面 | リアクションサンク | リアクト サーガ |
---|---|---|
コンセプト | アクションクリエイターの関数を返します | 副作用のためにジェネレーター関数を使用します |
学習曲線 | 学習と使用が簡単になりました | ジェネレーターによる学習時間が長くなる |
非同期フロー | 単純な非同期ロジックを処理します | 複雑な非同期ワークフローに適しています |
コード構造 | 構造が少ないため、大規模なアプリでは乱雑になる可能性があります | 明確で構造化されたアプローチを提供します |
テスト | テストはより困難になる可能性があります | ジェネレーターのおかげでテストが簡単 |
ユースケース | 単純な非同期ロジック、API リクエスト | 複雑なフロー (シーケンス、再試行など) |
パフォーマンス | 軽量 | より強力ですが、オーバーヘッドがわずかに増加します |
次の場合に React Tunk を使用します:
次の場合は React Saga を使用します
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3