Mit der Redux-Saga- Middleware können Sie das gut machen.
Definieren Sie einfach eine Saga, die nicht auf ausgelöste Aktionen wartet (z. B. mit takeoder takeLatest), bevor sie ausgelöst wird. Wenn es so forkaus der Root-Saga stammt, wird es beim Start der App genau einmal ausgeführt.
Das Folgende ist ein unvollständiges Beispiel, das ein wenig Wissen über das redux-sagaPaket erfordert , aber den Punkt veranschaulicht:
sagas / launchSaga.js
import { call, put } from 'redux-saga/effects';
import { launchStart, launchComplete } from '../actions/launch';
import { authenticationSuccess } from '../actions/authentication';
import { getAuthData } from '../utils/authentication';
const launchSaga = function* launchSaga() {
yield put(launchStart());
const authData = yield call(getAuthData, { params: ... });
yield put(authenticationSuccess(authData));
yield put(launchComplete());
};
export default [launchSaga];
Der obige Code löst eine launchStartund launchCompleteRedux-Aktion aus, die Sie erstellen sollten. Es ist eine gute Praxis, solche Aktionen zu erstellen, da sie nützlich sind, um den Staat zu benachrichtigen, wenn der Start gestartet oder abgeschlossen wird, andere Dinge zu tun.
Ihre Wurzelsaga sollte dann diese launchSagaSaga teilen:
sagas / index.js
import { fork, all } from 'redux-saga/effects';
import launchSaga from './launchSaga';
const root = function* rootSaga() {
yield all([
fork( ... )
fork(launchSaga)
]);
};
export default root;
Bitte lesen Sie die wirklich gute Dokumentation der Redux-Saga, um weitere Informationen darüber zu erhalten.
componentWillMount()hat das Ding gemacht. Ich habe eine einfache Funktion definiert, die allemapDispatchToProps()versandbezogenen Aktionen in App.js aufruft und aufruftcomponentWillMount().