Когда список категорий станет доступным в магазине A, выберите одну категорию и установите ее идентификатор в магазине B
У меня есть два магазина - GroupsStore и ItemsFilterStore. Состояние ItemsFilterStore должно содержать выбор одной группы из групп, доступных в GroupsStore, но:
группы изначально недоступны в GroupsStore, поэтому выбор в ItemsFilterStore не может быть изначально сделан (конструктор инициализирует его как ноль).
как только группы станут доступны в GroupStore, мне нужно выполнить действие, которое выберет одну группу (согласно некоторой логике) и установит ее ID в ItemsFilterStore.
ЭТА ПРОБЛЕМА:
Я читал ВЕЗДЕ, что запуск действий из обработчиков действий в магазине является антипаттерном.
Так как мне правильно это спроектировать?
1 ответ
Ну, я придумал 2 возможных способа решения этого дела. Просто для ясности, скажем, у вас есть действие getGroups
это вызывает запрос к источнику. Когда запрос успешен, он запускает действие resultsRecieved
, который GroupsStore
ручки.
1) Вы можете слушать resultsRecieved
действие в обоих магазинах и обработать результаты, чтобы обновить ItemsFilterStore
, Но в этом случае вам может понадобиться извлечь логику выбора группы из GroupsStore
в некоторый служебный файл, который можно импортировать и использовать в обоих хранилищах, если это возможно.
2) Вы можете слушать getGroups
Акция в обоих магазинах. в ItemsFilterStore
В качестве обработчика этого действия вы можете использовать метод ожидания Alt, который сигнализирует о том, что это хранилище зависит от другого хранилища своих данных, и должно ожидать его обновления. Так что обработчик getGroups в ItemsFilterStore
может выглядеть примерно так:
getGroups() {
this.waitFor(GroupsStore);
var groups = GroupsStore.getState().groups;
}
Я не до конца уверен, насколько хорошо ожидание будет работать с асинхронными исходными запросами, поскольку я использовал его только для ожидания синхронных операций.