За допомогою проміжного програмного забезпечення redux-saga ви можете це зробити чудово.
Просто визначте сагу, яка не стежить за відправленою дією (наприклад, за допомогою takeабо takeLatest) перед тим, як її ініціювати. Коли forkвиходить із кореневої саги, він запускається рівно один раз під час запуску програми.
Далі поданий неповний приклад, який вимагає знань про redux-sagaпакет, але ілюструє суть:
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];
Наведений вище код розподіляє дію launchStartта launchCompleteредукцію, яку слід створити. Це хороша практика створювати такі дії, оскільки вони дуже корисні, щоб повідомити державу про інші дії, коли запускання розпочнеться чи завершиться.
Потім ваша коренева сага повинна розгалужити цю launchSagaсагу:
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;
Будь ласка, прочитайте справді хорошу документацію про redux-saga, щоб отримати додаткову інформацію про неї.
componentWillMount()зробив. Я визначив просту функцію, що викликає всі дії, пов'язані з відправленням, вmapDispatchToProps()App.js і закликав їїcomponentWillMount().