За допомогою проміжного програмного забезпечення 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()
.