tl; dr: В функции промежуточного ПО Redux можно ли отправлять новое действие после вызова next
для завершения обновления магазина?
Я создаю читатель HackerNews, используя Flutter и built-flutter-redux , основанный на примере TodoMVC Брайана Игана . Он использует HN Firebase-поддерживаемый API для извлечения данных:
https://github.com/HackerNews/API
Мои действия выглядят сейчас так:
ActionDispatcher<Null> fetchHackerNewsTopStories;
ActionDispatcher<List<int>> fetchHackerNewsTopStoriesSuccess;
ActionDispatcher<Null> fetchHackerNewsTopStoriesFailure;
ActionDispatcher<Null> fetchNextHackerNewsItem;
ActionDispatcher<HackerNewsItem> fetchHackerNewsItemSuccess;
ActionDispatcher<Null> fetchHackerNewsItemFailure;
Есть часть промежуточного программного обеспечения, которое прослушивает действие fetchHackerNewsTopStories
и запускает вызов API:
MiddlewareHandler<AppState, AppStateBuilder, AppActions, Null>
createFetchHackerNewsTopStories(HackerNewsRepository service) {
return (MiddlewareApi<AppState, AppStateBuilder, AppActions> api,
ActionHandler next, Action<Null> action) {
service.fetchHackerNewsTopStories().then((ids) {
return api.actions.fetchHackerNewsTopStoriesSuccess(ids);
}).catchError(api.actions.fetchHackerNewsTopStoriesFailure);
next(action);
};
}
Когда он возвращается, я обновляю состояние моего приложения списком идентификаторов.
В какой-то момент мне нужно отправить другое действие, fetchNextHackerNewsItem
. Есть еще одна промежуточная функция, которая будет прослушивать это действие и запрашивать детали для первой истории. Когда эти детали поступят, он запросит следующую историю и так далее, пока все не будет обновлено.
Я хотел бы знать, могу ли я сделать это:
// Invoked when REST call for the list of top story IDs completes.
MiddlewareHandler<AppState, AppStateBuilder, AppActions, List<int>>
createFetchHackerNewsTopStoriesSuccess() {
return (MiddlewareApi<AppState, AppStateBuilder, AppActions> api,
ActionHandler next, Action<List<int>> action) {
next(action);
api.actions.fetchNextHackerNewsItem(); // Is this cool?
};
}
// Initiates a request for a single story's details.
MiddlewareHandler<AppState, AppStateBuilder, AppActions, Null>
createFetchNextHackerNewsItem(HackerNewsRepository service) {
return (MiddlewareApi<AppState, AppStateBuilder, AppActions> api,
ActionHandler next, Action<Null> action) {
int nextId = api.state.topStoryIds[api.state.loadedUpToIndex];
service.fetchHackerNewsItem(nextId).then((item) {
return api.actions.fetchHackerNewsItemSuccess(item);
}).catchError(api.actions.fetchHackerNewsTopStoriesFailure);
next(action);
};
}
Поскольку createFetchNextHackerNewsItem
зависит от состояния приложения (api.state.topStoryIds[api.state.loadedUpToIndex]
), я бы хотел, чтобы оно запускалось после , хранилище обновляется с помощью вызова next(action)
.
Здорово ли отправлять новые действия в промежуточном программном обеспечении Redux после вызова next
, или это своего рода анти-паттерн? Если является анти-паттерном, то как лучше всего реализовать этот поток?