react hooks在swiper5以下中去修改状态失败问题

swiper官方文档提供的原生api是通过new一个swiper实例去调用方法,但是在hooks里面当我想获取到当前的轮播索引的时候却发现不能去存储到我的状态里面,但是我通过改写了一些其他方法发现也不行,应该是swiper new了一个实例之后,不能set其hooks里面的状态,然后我就改写了swiper6的方式去写发现就没有这个问题了是可以修改状态的,代码对比如下:

这是swiper5版本下的

  const initSwiper = useCallback(() => {
    var slide = null;

    new Swiper('.swiper-container', {
      direction: 'vertical',
      followFinger: false,
      speed: 1300,
      mousewheel: true,
      // loop: true,
      //   navigation: {
      //     nextEl: '.swiper-button-next',

      //     prevEl: '.swiper-button-prev',
      //   },
      pagination: {
        el: '.swiper-pagination',
        clickable: true,
      },

      on: {
        init: function (swiper) {
          slide = this.slides.eq(0);
          slide.addClass('ani-slide');
          // setInitSpeed(1300);
        },
        transitionStart: function () {
          for (let i = 0; i < this.slides.length; i++) {
            slide = this.slides.eq(i);
            slide.removeClass('ani-slide');
            // setInitSpeed(1300);
          }
        },
        transitionEnd: function () {
          // slide = this.slides.eq(this.activeIndex);
          // console.log(this.activeIndex);
          if (this.activeIndex >= 1) {
            setInitSpeed((prev) => prev + 800);
            console.log(initSpeed, 'speed');
          }

          slide.addClass('ani-slide');
        },
      },
    });
  }, []);
  useEffect(() => {
    // setTimeout(() => {
    initSwiper();
    // },);
  }, [initSwiper]);
  

这是swiper6版本下的

<Swiper
        onBeforeDestroy={() => {
          return true;
        }}
        navigation={{
          nextEl: '.btn_next',

          prevEl: '.btn_prev',
        }}
        styleName="slider"
        speed={initSpeed}
        direction="vertical"
        followFinger={false}
        //     pagination: {
        //       el: '.swiper-pagination',
        //       clickable: true,
        //     },
        pagination={{
          el: '.swiper-pagination',
          clickable: true,
        }}
        onSlideChange={(swiper) => {
          if (swiper.realIndex >= 1) {
            setInitSpeed(1300);
          } else {
            setInitSpeed(500);
          }
          console.log(swiper.realIndex);
        }}
        mousewheel={true}
      >
        {initBg.map((item, index) => {
          return (
            <SwiperSlide>
              <div styleName="slide_wraps">
                <img src={item} alt="" />
              </div>
            </SwiperSlide>
          );
        })}
      </Swiper>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值