我有一个React应用程序,在useEffect
中调用我的 API ,该API返回要用作图像src的URL列表。
我正在使用react-loader-spinner
显示加载动画组件,同时加载我的图像。
我在useState
中有一个loading
变量,以确定图像是否正在加载。
我无法弄清楚如何停止显示加载动画并在所有图像加载完成后显示它们。
这是我的代码:
Photos.jsx
import React, { useState, useEffect, Fragment } from 'react'
import Loader from 'react-loader-spinner';
import { getAllImages } from '../../services/media.service';
import Photo from '../common/Photo';
const Photos = () => {
const [photos, setPhotos] = useState([]);
const [loading, setLoading] = useState(false);
useEffect(() => {
setLoading(true);
getAllImages()
.then(results => {
setPhotos(results.data)
console.log(results.data)
})
.catch(err =>{
console.log(err)
})
}, [])
const handleLoading = () => {
setLoading(false)
}
return (
<Fragment>
<div className="photos">
{ loading ?
<Fragment>
<Loader
height="100"
width="100"
/>
<div>Loading Joe's life...</div>
</Fragment>
:
photos.map((photo, index) => (
index !== photos.length - 1 ?
<Photo src={photo.src} key={photo.id} /> :
<Photo src={photo.src} key={photo.id} handleLoad={handleLoading}/>
))
}
</div>
</Fragment>
);
}
export default Photos;
Photo.jsx
import React from 'react'
import './Photo.css';
const Photo = (props) => {
return (
<div className="photo">
<img src={props.src} alt={props.alt} onLoad={props.handleLoad}/>
<div className="caption">
Photo caption
</div>
</div>
);
}
export default Photo;
我尝试在最后一个项目中使用onLoad
,但它永远不会被调用,因为loading
由于旋转器仍在显示而没有被设置回false。
希望能得到一些帮助。谢谢。
loading
永远不会变成 false。 - blueprintchrisundefined
。 - Sagiv b.guseEffect
中设置[loading]
,否则它只会在下一次渲染时重置,或者为什么不将默认值设置为 true,并在你的useEffect
中删除setLoading
,因为这样做没有任何理由导致重新渲染。 - Keith