Я ищу лучший способ выбора и ожидания данных из нескольких других саг.
Проблемы:
- загрузка данных из нескольких источников
- загруженные данные должны быть доступны для множества различных частей приложения
- асинхронный неопределенный поток загрузки данных
Вот моя текущая реализация для загрузки источников данных для использованияв моей саге:
/** For the purposes of this question:
* getData returns a selector function (returns a portion of the state)
* fetchData & setData are actionCreators (returns an action)
*/
function* doSomethingSaga() {
let foo = yield select(getData('foo'));
if (!foo.data) {
if (!foo.loading && !foo.error) {
yield put(fetchData('foo'));
}
foo = yield take('FOO_FETCHING_COMPLETE');
}
let bar = yield select(getData('bar'));
if (!bar.data) {
if (!bar.loading && !bar.error) {
yield put(fetchData('bar'));
}
bar = yield take('BAR_FETCHING_COMPLETE');
}
const fooBar = doSomething(foo.data, bar.data);
yield put(setData('fooBar', fooBar));
}
export default function* onDoSomething() {
yield takeEvery('DO_SOMETHING', doSomethingSaga);
}
... должен быть лучший способ, чем добавить 7 строк кода для каждого фрагмента данных, который мне нужно загрузить в сагу, но я не смогнайди его еще.