Я изучаю React и пытаюсь сделать простой сайт, который по сути является поисковой системой Giphy, используя их API.
Пока все хорошо, я получаю и отображаю данные (популярный Giphy картинки). Проблема в том, что мне не нравится, как работает мой индикатор загрузки. Это показывает немного, но когда это исчезает, (40) изображения все еще заполняются в контейнере.
Можно ли сделать так, чтобы индикатор загрузки исчезал только тогда, когда все загружено?
<Loader>
- мой индикатор загрузки. Я также использую некоторые компоненты Reactstrap.
Вот мои текущие 2 компонента:
Приложение. js
import React, { useState, useEffect } from 'react'
import "react-loader-spinner/dist/loader/css/react-spinner-loader.css"
import Loader from 'react-loader-spinner'
import Results from './Components/Results'
import { UncontrolledAlert } from 'reactstrap'
function App() {
const [isLoading, setLoading] = useState(true)
const [gifsData, setGifsData] = useState([])
const [errorMessage, setErrorMessage] = useState('')
useEffect(() => {
const giphyTrending = async () => {
await fetch(`https://api.giphy.com/v1/gifs/trending?api_key=OGINPHAsY1NNNhf6XIlpX1OygKXDFfXV&limit=50&rating=R`)
.then(res => res.json())
.then(data => {
setGifsData(data.data)
setLoading(false)
})
.catch(err => setErrorMessage(err.message))
}
giphyTrending()
}, [])
if (errorMessage) {
return (
<div>
<UncontrolledAlert color="secondary">{errorMessage}</UncontrolledAlert>
</div>
)
}
return (
<div className='App'>
{isLoading ?
<Loader className='loader' type="Circles" color="yellow" height={120} width={120} />
:
<Results isLoading={isLoading} gifsData={gifsData} />}
</div>
)
}
export default App
Results.jsx (не уверен, что этот нужен, но на всякий случай)
const Results = (props) => {
return (
<div className='gifsContainer'>
{props.gifsData.map(gif => (
<div key={gif.id}>
<CardImg className='gifs' src={gif.images.fixed_height_small.url} alt={gif.title} />
</div>))}
</div>
)
}
export default Results