react中使用antd轮播图bug

本文介绍了在React应用中使用Ant Design的轮播图组件遇到的两个问题:一是页面刷新后轮播图不会自动播放,二是切换TabBar时轮播图高度出现异常。为了解决这些问题,提出了在轮播图数据加载完成后渲染组件的策略,并附上了相关代码截图。
  1. 刷新页面轮播图不会自动播放
  2. 切换tabBar轮播图高度出现问题

解决方案

轮播图数据加载完毕后再去渲染轮播图

import React from "react";
import { Carousel, Flex } from "antd-mobile";
import axios from "axios";
import Nav1 from "../../assets/images/nav-1.png";
import Nav2 from "../../assets/images/nav-2.png";
import Nav3 from "../../assets/images/nav-3.png";
import Nav4 from "../../assets/images/nav-4.png";
import "./index.css";

const navs = [
  {
    id: 1,
    img: Nav1,
    title: "整租",
    path: "/home/list",
  },
  {
    id: 2,
    img: Nav2,
    title: "合租",
    path: "/home/list",
  },
  {
    id: 3,
    img: Nav3,
    title: "地图找房",
    path: "/map",
  },
  {
    id: 4,
    img: Nav4,
    title: "去出租",
    path: "/rent/add",
  },
];
export default class Index extends React.Component {
  state = {
    swiperList: [],
    imgHeight: 203,
    swiperLoaded: false,
  };

  async getSwiperList() {
    const { data: res } = await axios.get("http://localhost:8080/home/swiper");
    console.log(res);
    if (res.status !== 200) {
      return console.log("获取轮播图数据失败");
    }
    this.setState(() => {
      return {
        swiperList: res.body,
        swiperLoaded: true,
      };
    });
  }

  renderSwiper() {
    return this.state.swiperList.map((val) => (
      <a
        key={val.id}
        href="www.baidu.com"
        style={{
          display: "inline-block",
          width: "100%",
          height: this.state.imgHeight,
        }}
      >
        <img
          src={`http://localhost:8080${val.imgSrc}`}
          alt=""
          style={{ width: "100%", verticalAlign: "top" }}
        />
      </a>
    ));
  }

  renderNav() {
    return navs.map((item) => {
      return (
        <Flex.Item className="navItem" key={item.id}>
          <img src={item.img} alt="" />
          <div>{item.title}</div>
        </Flex.Item>
      );
    });
  }
  componentDidMount() {
    this.getSwiperList();
  }
  render() {
    return (
      <div>
        <div className="swiper">
          {this.state.swiperLoaded ? (
            <Carousel autoplay autoplayInterval={3000} infinite>
              {this.renderSwiper()}
            </Carousel>
          ) : (
            ""
          )}
        </div>
        <Flex className="nav">{this.renderNav()}</Flex>
      </div>
    );
  }
}

相关代码截图如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值