[Swiper]在React中使用Swiper时注意销毁实例

swiper版本号:

json 复制代码
{
  "swiper": "^4.4.2",
}

在useEffect中初始化swiper实例,由于依赖项的变更,可能会重复初始化:

javascript 复制代码
useEffect(() => {
  swiper.current = new Swiper('#mainSwiper', {
    autoplay: {
      delay: 3000,//3秒切换一次
    },
    on: {
      slideChange: function() {
        //...
      },
    },
  });
}, [swiperRef, tabList, swiperList, unmountedRef]);

如果tabList、swiperList有变更,会导致重复创建实例。

我们查看swiper官方文档,找到相关方法:

据此在return中销毁实例:

javascript 复制代码
useEffect(() => {
  swiper.current = new Swiper('#mainSwiper', {
    autoplay: {
      delay: 3000,//3秒切换一次
    },
    on: {
      slideChange: function() {
        //...
      },
    },
  });
  return () => {
    //增加销毁实例的方法,防止多次实例化
    if (swiper.current && isFunction(swiper.current.destroy)){
      try {
        swiper.current.destroy();
        console.log('swiper destroy')
      } catch (e) {
        console.error('swiper destroy error', e)
      }
    }
  }
}, [swiperRef, tabList, swiperList, unmountedRef]);

也许可以使用updateSlides()来更新实例,目前还未使用过该方法。

相关推荐
阿慧勇闯大前端9 分钟前
在AI时代,再去了解react19新特性还有用吗? 最近总有朋友问我:“现在AI写代码这么厉害了,我写个需求丢给ChatGPT,几秒钟就生成一堆组件,还学新特
前端·react.js
秋水无痕18 分钟前
从零搭建个人博客系统:Spring Boot 多模块实践详解
前端·javascript·后端
陆枫Larry25 分钟前
图片预览前先 filter 掉空地址:一个容易忽略的细节
前端
我叫蒙奇33 分钟前
rem 适配全过程
前端
陆枫Larry34 分钟前
小程序中按固定宽高比展示图片并去除黑边的实现思路
前端
HelloReader38 分钟前
Tauri 2.1 新特性自定义 HTTP Headers 配置详解
前端
一点一一1 小时前
从输入URL到页面加载:浏览器多进程/线程协同的完整逻辑
前端·面试
HelloReader1 小时前
Tauri 的安全架构Capabilities 与 CSP
前端
阿懂在掘金1 小时前
Vue 表单避坑(二):多个 v-model 同时更新,为什么数据丢了?
前端·vue.js
鹏北海1 小时前
Qiankun 微前端实战踩坑历程
前端·架构