1.在使用antd的Carousel组件时,轮播图刚开始不会进行自动轮播,并且在从其他页面跳转到当前页面时,轮播图展示不完全的问题
原因:轮播图数据是动态加载的,加载完成前后轮播图数量不一致
解决方案:1.在state中添加表示轮播图加载完成的数据
2.在轮播图加载完成时,修改该数据状态值为true
3.只有轮播图数据加载完成的情况下,才渲染轮播图组件
4.闪动问题,是将轮播图放在一个div盒子里面进行展示,给这个盒子一个默认的类名,让其默认高度问盒子的高度,这样轮播图下面的数据就不会出现闪动的问题了
话不多说,直接上代码
export default class Index extends React.Component {
state = {
// 轮播图数据
swipers: [],
// 轮播图是否加载完成
isSwiperLoad: false,
}
// 请求轮播图方法
async getSwiperData() {
const res = await axios.get("/home/swiper")
// console.log(res)
this.setState({
swipers: res.body,
isSwiperLoad: true
})
}
// 页面dom元素加载完成调用
componentDidMount() {
this.getSwiperData()
}
render() {
return (
<div className="index">
{/* 轮播图菜单 */}
<div className="swiper">
{this.state.isSwiperLoad ? <Carousel
autoplay
infinite>
{this.state.swipers.map(item => (
<img
key={item.id}
src={`http://localhost:8080${item.imgSrc}`}
alt=""
style={{ width: '100%', verticalAlign: 'top' }}
/>
))}
</Carousel> : ''
}
</div>
</div>
)
在css文件中
.swiper{
height:轮播图图片的高度
}