Исходя из приведенного здесь кода, я предполагаю, что вы пытаетесь дождаться, пока image_url не будет установлен для всех элементов в fetchBreeds.data. Но так работать не будет.
await fetchBreeds.data.map(breed => {
axios.get(`https://api.thecatapi.com/v1/images/search?breed_ids=${breed.id}&include_breeds=false`)
.then(res => breed.image_url = res.data[0].url)
})
Вы используете await
в функции карты. Функция карты не является асинхронной c, поэтому, когда вы отправляете действие, image_urls еще не установлены. Когда вы проверили магазин и обнаружили, что image_url был там, потому что fetchBreeds.data был изменен прямым вызовом ax ios без использования системы диспетчеризации redux. Это не привело к повторной визуализации пользовательского интерфейса, поэтому изображение не отображалось. Что произошло, показано ниже:
dispatch({ type: FETCH_BREEDS, payload: fetchBreeds.data })
Это происходит первым. - Компонент получает уведомление, поэтому произведите повторную визуализацию. image_url еще не установлен, поэтому изображение пустое
.then(res => breed.image_url = res.data[0].url)
Это вызывается следующим. Поскольку функция содержит ссылку на fetchBreeds.data, она изменяет объект fetchBreeds.data напрямую, без использования редуктора. - Пользовательский интерфейс не уведомляется, поэтому он не знает, что image_url изменен и не будет повторно render.
Я предлагаю вам изменить функцию на:
await Promise.All(fetchBreeds.data.map(breed => {
return axios.get(`https://api.thecatapi.com/v1/images/search?breed_ids=${breed.id}&include_breeds=false`)
.then(res => breed.image_url = res.data[0].url)
}))