redux-sagaを使用してください。 Redux sagaは、非同期関数の呼び出しと副作用の処理に特に使用されます。
たとえば、データが取得されている間に、UIにローダーアイコンを表示することができます。その後、データを受け取った後にローダーアイコンを非表示にします。 Redux-sagaを使用して、この非同期アクティビティを同期アクティビティに変換して書き込むことができます。
例は、あなたが最初で、この気が遠くなるのかもしれません
import { take, call, put, fork, cancel, race } from 'redux-saga/effects';
import { delay } from 'redux-saga';
import { LOCATION_CHANGE } from 'react-router-redux';
import { DATA_LOAD_REQUEST } from './constants';
import { dataLoadSuccess, dataLoadFailure } from './actions';
import request from 'utils/request'; //isomorphic-fetch
export function* getCompanies() {
const requestURL = 'https://api.myjson.com/bins/32rap';
const { companies, timeout } = yield race({
companies: call(request, requestURL),
timeout: call(delay, 10000),
});
if (companies) {
yield put(dataLoadSuccess(companies.data));
} else if (timeout) {
yield put(dataLoadFailure());
} else {
yield put(dataLoadFailure());
}
}
export function* getCompaniesWatcher() {
while (yield take(DATA_LOAD_REQUEST)) {
yield call(getCompanies);
}
}
export function* companiesData() {
const watcher = yield fork(getCompaniesWatcher);
yield take(LOCATION_CHANGE);
yield cancel(watcher);
}
// All sagas to be loaded
export default [
companiesData,
];
をsaga-。ビットごとに説明しましょう。 redux-sagaの定型文を無視すると、このコードが完全に同期していることがわかります。
はReduxのストアに
ディスパッチdataLoadRequest()
コード - 所与の解読します。 (UIのローダーを表示するため)。
APIにデータをリクエストします。
- ハンドルのタイムアウトに(データは、10秒でロードReduxのストアに
dataLoadFailure()
アクションをディスパッチする。
- データを受信した場合、ストアに
dataLoadSuccess()
アクションをディスパッチしない場合。
Reduxの-佐賀ES6を使用します発電機の機能。yield
キーワードは、発電機の機能の一部である。function*
が、それは発電機能と正常でないjavascriptの関数であることを示している。
・ホープ、このことができます。頑張って!
あなたはこのようにそれを達成することができ、私が正しく理解し
私が使用していないが反応するかReduxのが、私は、彼らが約束を使用するためのいくつかの方法を持っていると確信しています。あなたは、図書館のPromiseの実装かネイティブの約束を使って試しましたか? – zero298
あなたは 'ajax' libを使っていますか? – 1ven
@ 1ven axios one – Ilja