私はredux-thunkミドルウェアを使用してAjaxリクエストを作成して処理するReact/Reduxアプリケーションを構築しています。私はかなり頻繁に発砲される特定のサンクを持っています。新しいAjaxリクエストを開始する前に、以前に開始したAjaxリクエストをキャンセルしたいと思います。これは可能ですか?redux-thunkを使用して以前の非同期アクションを取り消す
5
A
答えて
9
1つの方法は、それらの要求をランダムIDを与え、その結果を処理する前に状態をチェックすることによって、それらの要求をキャンセルとマークすることです。
これを行う方法は、最初のディスパッチ(サンク内)でこの呼び出しにランダムIDを割り当て、結果を処理する前に減速機でチェックすることです。
const actionId = Math.random();
dispatch({type: AJAX_LOAD_CONST, id:actionId })
あなたは結果があなたがU
とのidを送信することを忘れないでください処理したい場合には、要求を使用
dispatch({type:HANDLE_AJAX_RESPONSE, id:actionId, results: json })
のすべてをキャンセルしたいです減速機は次のようなものです:
function reducer(state = initialState, action) {
switch (action.type) {
case actions.AJAX_LOAD_CONST:
return Object.assign({}, state, { ajax: state.ajax.concat(action.id) });
case actions.CANCEL_ALL_AJAX:
return Object.assign({}, state, { ajax: [] });
case actions.HANDLE_AJAX_RESPONSE:
if (state.ajax.includes(action.id) {
//return state reduced with action.results here
}
return state;
}
}
XMLH ttpRequestまたはそのラッパー(JQuery?)の中にリクエストを保存してrequest.abort()を呼び出すこともできます。新しいフェッチAPIを使用すると、この動作が不十分であるという約束通り、この贅沢はありません。
1
アクションクリエイターが約束を返すようにすることができます。ディスパッチ機能によって返され、アボートすることができます。次に例を示します。
アクションの作成者
function doSomething() {
return (dispatch) => {
return $.ajax(...).done(...).fail(...);
}
}
あなたのコンポーネント
componentDidMount(){
this.previousPromise = this.props.dispatch(doSomething());
}
somefnct() {
this.previousPromise.abort();
}
関連する問題
- 1. Redux-thunk非同期アクション:非同期アクションにはカスタムミドルウェアを使用します
- 2. 非同期タスクを取り消して再アクティブ化する
- 3. URLを非同期で取得するタスクを取り消す
- 4. webclient非同期リクエストを取り消します
- 5. RxJSとの非同期アクションの同期
- 6. 使用Task.FromResult非同期アクションを作成するための
- 7. Xamarin.Forms - 非同期アクション用のBeginInvokeOnMainThread
- 8. アクションの非同期機能
- 9. Reduxでの非同期アクション
- 10. typescriptを使用してredux dispatchに非同期アクションを送信する
- 11. 非同期アクションでTransactionScopeのWebAPIでカスタムIHttpActionInvokerを使用
- 12. React/Redux非同期アクション
- 13. Redux connect chaining非同期アクション
- 14. MVCのアクションでの非同期の使用
- 15. は、使用して非同期/ノード7.4
- 16. フェッチ・モックを使って非同期Reduxアクションをテストし、jsonに変換する
- 17. Reduxアクションはプレーンなオブジェクトでなければなりません。非同期アクションにカスタムミドルウェアを使用する
- 18. Reactコンポーネント内の非同期アクション
- 19. react/reduxでのMocha/Chaiテスト:非同期アクション用にカスタムミドルウェアを使用
- 20. Firebaseの非同期リスナーを使用してデータを取得する
- 21. カーソルアダプタを使用した非同期リストビュー
- 22. NSURLConnectionを使用した非同期ダウンロードキュー
- 23. web2pyを使用した非同期バックグラウンドプロセス
- 24. XCTestを使用した非同期メソッドテスト
- 25. async.jsを使用した非同期ツリートラバーサル
- 26. Mojoliciousを使用した非同期チャットサーバ
- 27. 貧しいマンの非同期/を使用して非同期タイムアウトを実装する構造を待つ
- 28. 非同期モジュールを使用してforループを含むnodeJSの同期実行?
- 29. 非同期メソッドでの非同期ライブラリメソッドの使用
- 30. ASP.NET MVCアクションを取り消す方法