TypeError: res не определено при извлечении данных из dummyJson Api

  • Привет, ребята, мне нужна помощь, я получаю данные из фиктивного Json Api, используя метод fech, однако у меня возникает ошибка «TypeError: res is undefined», но я вижу, что определил ее.
  • ниже мой хук useEffect, который я использую для получения данных.
import { getAllProducts } from "../API";

const Products = () => {
    const [items, setItems] = useState([]);

    useEffect(() => {
        getAllProducts()
            .then((res) => {
                setItems(res.data);
            })
            .catch(err => {
                console.info(err)
            })
    }, []);

    return (
        <List
            grid = {{
                gutter: 16,
                xs: 1,
                sm: 2,
                md: 4,
                lg: 4,
                xl: 6,
                xxl: 3,
            }}
            dataSource = {items}
            renderItem = {(item) => (
                <List.Item>
                    <Card
                        key = {item.id}
                        title = {item.title}
                        cover = {<Image src = {item.thumbnail} />}
                    >
                    </Card>
                </List.Item>
            )}
        />
    );
}

export default Products;
  • Ниже показано, откуда я сделал вызов API.
export const getAllProducts = () => {
    return (
        fetch('https://dummyjson.com/products')
            .then(res => res.json())
            .then(console.info)
    )
}
  • Любая помощь высоко ценится. я думаю, что что-то упустил для отображения данных
  • я вижу в консоли извлекаемые продукты, но когда дело доходит до обработки ответа, я получаю res не определено.
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что ваш последний обратный вызов .then в getAllProducts вызывает console.info с данными, а затем возвращает возвращаемое значение console.info, которое равно undefined. Это становится первым аргументом обратного вызова .then в вашем useEffect. Если вы хотите добавить ведение журнала, вам все равно придется возвращать данные, чтобы к ним можно было получить доступ в следующем обработчике .then в цепочке.

return fetch('https://dummyjson.com/products')
    .then(res => res.json())
    .then(res => {
        console.info(res);
        return res;
    });

Кроме того, возвращенный образец JSON не имеет свойства data. Однако его свойство products является массивом.

setItems(res.products);

отлично, как вы сказали, мне нужно было только удалить последний console.info и изменить setItems (res.products); спасибо, босс

mutebi godfrey 01.04.2023 01:49

Другие вопросы по теме