@yumakaev

Что сделать с reducers?

Ребят, уже который день борюсь с редьюсером, все никак не могу разобраться в чем проблема.
Опишу ситуацию еще раз в двух словах, есть два сервиса (один отвечает за выгрузку инфы из локальной бд, второй отвечает за выгрузку инфы из АПИ)
Инфу #1 хочу отобразить на главной, Инфу #2 хочу искать через поле поиска, но, проблема в том, что два этих запроса отправляются одновременно, соответственно в редьюсере срабатывает два асинхронных действия, и одно действие затирает другое, т.е сейчас на главной на миг появляется инфа из локальной бд, но если воспользоваться поиском (написать - R2-D2 он выплюнет в консоль результат) Что нужно сделать для того, чтобы оба запросали отрабатывали как нужно?
https://codesandbox.io/s/naughty-wing-4wzu5
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
@twolegs
1. Если это независимые списки, то почему после ответа апи promoHeroes перезаписываются? Если идея в том, что инфу на главной всегда показывать из promo, то просто не трогать это поле при HEROES_API_LOADED.
2. Если же промо-список должен обновляться после запроса к апи, то тут можно реорганизовать стор.
В идеале - хранить нормализованный список героев. Примерная структура:
const store = {
  heroes: {
    byId: { 1: { id: 1, name: 'Luke', ... }, ... },
    allIds: [1, 2, 3, ...],
  },
  promoIds: [1, 2],
}

Иногда нормализация кажется излишней, и кажется что работать с таким стором сложнее, но на деле это оказывается удобнее.
Теперь, если сервисы promo и api должны формировать один общий список, то на экшенах HEROES_API_LOADED и HEROES_PROMO_LOADED необходимо мержить эти два списка в одно нормализованное хранилище heroes.
Даже если не хочется делать нормализацию, но необходимо объединить два списка из разных сервисов, придется писать какую-то логику мержа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы