Я пытаюсь извлечь функцию fetchImages из следующего компонента и поместить ее в новый компонент:
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import UnsplashImage from './UnsplashImage';
const Collage = () => {
const [images, setImages] = useState([]);
const [loaded, setIsLoaded] = useState(false);
const fetchImages = (count = 10) => {
const apiRoot = 'https://api.unsplash.com';
const accessKey =
'<API KEY>';
axios
.get(`${apiRoot}/photos/random?client_id=${accessKey}&count=${count}`)
.then(res => {
console.log(res);
setImages([...images, ...res.data]);
setIsLoaded(true);
});
};
useEffect(() => {
fetchImages();
}, []);
return (
<div className="image-grid">
{loaded
? images.map(image => (
<UnsplashImage
url={image.urls.regular}
key={image.id}
alt={image.description}
/>
))
: ''}
</div>
);
};
export default Collage;
Для этого я создал новый компонент с именем api.js , удалил всю функцию fetchImage из вышеуказанного компонента и поместил ее в api.js * 1011. * вот так:
api.js
const fetchImages = (count = 10) => {
const apiRoot = 'https://api.unsplash.com';
const accessKey =
'<API KEY>';
axios
.get(`${apiRoot}/photos/random?client_id=${accessKey}&count=${count}`)
.then(res => {
console.log(res);
setImages([...images, ...res.data]);
setIsLoaded(true);
});
};
export default fetchImages;
Далее я взял setIsLoaded (true); из api.js и вставил его в компонент Collage следующим образом:
useEffect(() => {
fetchImages();
setIsLoaded(true);
}, []);
Теперь я могу импортировать fetchImages в компонент Collage.
Однако я не знаю, что мне делать с этой строкой внутри функции fetchImages? Для этого нужно перейти к компоненту Collage, но res.data не определено внутри компонента Collage.
setImages([...images, ...res.data]);
Как мне с этим справиться?