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;
export const getAllProducts = () => {
return (
fetch('https://dummyjson.com/products')
.then(res => res.json())
.then(console.info)
)
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема в том, что ваш последний обратный вызов .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); спасибо, босс