在react 中使用 Swiper@6.8.4 -(解决initialSlide初始化设置无效问题)

 下载Swiper

yarn add swiper@6.8.4 

 基础使用

引入模块:

import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/swiper-bundle.css';

基础使用:

<Swiper
    spaceBetween={5} // 间隔
    initialSlide={index} // 初始化显示第几个
    slidesPerView={7}  // 每页显示个数
    slidesPerGroup={6}  // 翻页个数
>

  {
    list.map((m, i) => {
      const { name = '', infoData = {} } = m;
        return (
          <SwiperSlide>
            <div className={styles.lineStrucType_start}>
              <img
                src={bdzImg}
                alt=""
                />
              <div style={{ fontSize: '1rem' }}>{name}</div>
            </div>
          </SwiperSlide>
        );
    })
  }
</Swiper>

添加额外模块(Pagination)

默认情况下,Swiper React使用Swiper的核心版本(没有任何附加组件)。如果要使用导航、分页和其他组件,必须先安装它们。

Swiper官方文档参考地址

// 引入 安装模块,导航模块
import SwiperCore, { Pagination } from 'swiper'
import 'swiper/components/pagination/pagination.min.css';

// 使用安装模块对引入的模块进行安装
SwiperCore.use([ Pagination ])

<Swiper
    spaceBetween={5}
    initialSlide={index}
    slidesPerView={7} 
    slidesPerGroup={6}  
    pagination={{ clickable: true }} // pagination配置
>

BUG:

遇到一个问题:在请求数据后,要将Swiper定位到特定的SwiperSlide。按理来说Swiper设定了initialSlide={index}的值应该就行,但没有生效。在传递数据的时候打印了一下对应的传值index的值,发现setState之后传的index确实有变化,但是Swiper并未定位生效,怀疑是initialSlide这个参数的改变并不能触发Swiper重绘。

解决方法:

方法一:在Swiper里onSwiper初始化SwiperObj实例,然后在改变请求数据改变之后SwiperObj.slideTo(index)去跳转。

<Swiper
    spaceBetween={5}
    initialSlide={0}
    slidesPerView={7} 
    slidesPerGroup={6}  
    pagination={{ clickable: true }}
    onSwiper={(el) => setSwiperObj(el)}
>


//数据请求完成之后
swiperObj.slideTo(index)

方法二:按照封装组件的思路,传的值确实是发生了变化但是接受值的参数initialSlide没有触发组件的更新改变,可以尝试新增一个key参数来接收变化的值,看下是否能触发更新重绘。发现确实有效。..

<Swiper
  key={index}
  spaceBetween={5}
  initialSlide={index}
  slidesPerView={7} 
  slidesPerGroup={6}  
  pagination={{ clickable: true }}
>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值