У меня есть приложение redux, которое представляет собой обзор со страницами. Чтобы изменить страницы, у меня есть действие NAVIGATION_NEXT_PAGE. Затем редукторы обрабатывают создание новой страницы в магазине. У меня есть множество других действий, которые задают ответы на вопросы или даже перемещаются по страницам. В каждой новой странице, отображаемой через NAVIGATION_NEXT_PAGE, у меня есть список пользовательских действий, которые должны выполняться, когда страница отображается в первый раз и когда на вопросы отвечают.Как поставить в очередь действия из результата другого действия
Моя проблема заключается в том, как отправлять рекурсивно каждый раз при отображении новой страницы, все еще отделяя логику действий от компонентов. Я не хочу отправлять действия в свой PageContainer, так как я не хочу, чтобы страница отображалась вообще, если какое-либо действие попросит пропустить ее.
Это мое текущее решение:
const actionMiddleware = (store) => (next) => (action) => {
// Execute post answer actions on the current page.
switch (action.type) {
case types.NAVIGATION_NEXT_PAGE:
for (let postAnswerAction of store.getState().postAnswerActions);
next(store.dispatch(actionFromPageAction(postAnswerAction)))
break;
}
// Evaluate the action.
let result = next(action);
// Execute the preload actions of the new page.
switch (action.type) {
case types.NAVIGATION_NEXT_PAGE:
for (let preLoadAction of store.getState().preLoadActions);
next(store.dispatch(actionFromPageAction(preLoadAction)))
break;
}
return result;
};
Но он вводит странное поведение, иногда реагируют не обновляет свой пользовательский интерфейс. Может быть, мое промежуточное ПО разрывает реакцию-сокращение?
Я нахожусь на правильном пути. Что это за правильный способ отправки действий из моего промежуточного ПО?
Если вы не против проверки другой библиотеки, то [redux-observable] (https://github.com/redux-observable/redux-observable) делает именно это плюс больше с мощностью rxjs 'Observables'. Он по сути сводит ваши действия в один поток Observable, и вам разрешено преобразовывать их в функции, которые они называют эпиками. Также вам не нужно будет добавлять промежуточное ПО, которое, насколько я понимаю, должно работать на гораздо более общем уровне. –
Поскольку я не нуждаюсь в асинхронной функциональности, есть ли альтернатива, которая не будет зависеть от RxJS? Для ограничения зависимостей. –
Добавлен ответ ниже, пожалуйста, внимательно прочитайте его. Сохранение действий в магазине действительно не похоже на хорошую практику. –