Вы не можете вернуть состояние дважды из функции редуктора, и вы не можете вернуть обновленное состояние из функции редуктора асинхронным способом.
Возврат чего-либо из функции обратного вызова метода .then()
не делает его возвращаемым значением внешней функции, то есть функцией редуктора в вашем случае.
Функции редуктора являются синхронными, они принимают действие и на основе действия возвращают обновленное состояние. Все это происходит синхронно.
То, что вы делаете в своей функции редуктора, не будет работать так, как вы ожидаете, и оператор return
в вашей функции редуктора всегда будет выполняться до завершения асинхронного кода. Это означает, что ваша функция reducer всегда возвращает одно и то же состояние, что означает, что ваше хранилище redux никогда не обновляется.
Решение
Что вам нужно, так это способ отправки действия, которое запускает выборку данных, и как только данные станут доступны, должно быть отправлено другое действие, полученное функцией редуктора. Это новое действие должно содержать данные, которые выбираются асинхронно в качестве полезной нагрузки, а функция редуктора просто обновит состояние соответствующим образом, используя полезную нагрузку, связанную с действием.
Ниже приведены несколько вариантов, которые позволят вам это сделать:
Использовать первый вариант проще, поэтому я бы рекомендовал начать с него, но вы также можете изучить второй вариант, который также помогает в расширенных вариантах использования.
Вот несколько ресурсов, которые помогут вам начать работу с каждым из упомянутых выше вариантов:
person
Yousaf
schedule
17.10.2020