この記事では、redux の非同期操作について詳しく説明します (コード例)。必要な方は参考にしてください。
1. Redux の基本
redux
ディスパッチ (アクション) を通じて - > ミドルウェア -> リデューサーはデータを処理します -> ストアの変更を監視し、ビューを更新して 1 つのストアに保存します
オブジェクト内のreducerは純粋な関数であり、非同期操作には結果の不確実性による副作用が含まれるため、特別な処理が必要です
# #react-redux
コンテナ コンポーネントは connect によって生成されます。ストアが変更されるたびに、connect が呼び出され、mapStateToProps、mapDispatchToPropsmapStateToProps という 2 つのパラメータを受け取り、状態を UI コンポーネントの props にマップします。 mapDispatchToProps、ディスパッチ メソッドを UI にマップします。コンポーネントの props
Provider コンポーネントは、コンテンツ API を使用して、接続で使用するストアを最上位レベルからコンポーネントの各層に渡します
2. 非同期処理のための Redux ミドルウェア
redux-thunkredux-thunk ミドルウェアによりアクションをメソッドにできる
アクションを受け取った後、ミドルウェアはアクション メソッドを実行し、結果をリデューサーに提供します。アクションの混乱によりメンテナンスが困難になりますredux-saga
saga はアクションをリッスンし、このアクションに基づいてエフェクト操作を実行します
Effects は、ブロック呼び出しと非ブロック呼び出し、キャンセル、待機、競合、その他の操作を含む柔軟な API を提供します。
非同期操作の分離と実行に便利で、テストも簡単です
3。 redux-request-async-middleware
リデューサーに通知するアクション。リクエストが始まりました。この種のアクションの場合、リデューサーは状態の isFetching タグを切り替える可能性があります。これにより、UI に読み込みインターフェイスを表示するように指示されます。 リクエストが成功したことをリデューサーに通知するアクション。この種のアクションの場合、リデューサーは受信した新しいデータを状態にマージし、isFetching をリセットすることがあります。 UI は読み込みインターフェイスを非表示にし、受信したデータを表示します。 リクエストが失敗したことをリデューサーに通知するアクション。この種のアクションの場合、リデューサーは isFetching をリセットする場合があります。さらに、一部のリデューサーはこれらの障害情報を保存し、UI に表示します。
つまり、インターフェイスは次のように開始されます。dispatch(fetchPostsRequest(subject)); fetch(url).then(res => { dispatch(fetchPostsSuccess(subject, res)); }).catch(e => { dispatch(fetchPostsFailure(subject, e)); })
export const reduxRequest = store => next => action => { let result = next(action); let { type, subject, model } = action; let _next = action.next; if(type === FETCH_POSTS_REQUEST) { model().then(response => { _next && _next(response); store.dispatch(fetchPostsSuccess(subject, response)); }).catch(error => { console.error(error); store.dispatch(fetchPostsFailure(subject, error)); }); } return result };/
export const requests = (state = {}, action) => { switch (action.type) { case FETCH_POSTS_REQUEST: return assign({}, state, { [action.subject]: { isFetching: true, state: 'loading', subject: action.subject, response: null, error: null, } } ); case FETCH_POSTS_FAILURE: return assign({}, state, { [action.subject]: { isFetching: false, state: 'error', subject: action.subject, response: state[action.subject].response, error: action.error, } } ); case FETCH_POSTS_SUCCESS: return assign({}, state, { [action.subject]: { isFetching: false, state: 'success', subject: action.subject, response: action.response, } } ); case FETCH_POSTS_CLEAR: return assign({}, state, { [action.subject]: { isFetching: false, state: 'cleared', subject: null, response: null, error: null, } } ) return state; } }
const request = (subject, model, next) => { _dispatch(fetchPostsRequest(subject, model, next)); return true; };
インターフェイスは redux によって処理され、ビュー コンポーネントは処理されます外部には単純なインターフェイスのみを公開します。操作するには、ビジネス層とビュー層を分離します。
以上がredux 非同期操作の詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。