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 take
oder takeLatest
), bevor sie ausgelöst wird. Wenn es so fork
aus 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-saga
Paket 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 launchStart
und launchComplete
Redux-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 launchSaga
Saga 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()
.