[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()来更新实例,目前还未使用过该方法。

相关推荐
代码的余温几秒前
CSS3文本阴影特效全攻略
前端·css·css3
AlenLi10 分钟前
JavaScript - 策略模式在开发中的应用
前端
xptwop12 分钟前
05-ES6
前端·javascript·es6
每天开心13 分钟前
告别样式冲突:CSS 模块化实战
前端·css·代码规范
wxjlkh16 分钟前
powershell 批量测试ip 端口 脚本
java·服务器·前端
海底火旺16 分钟前
单页应用路由:从 Hash 到懒加载
前端·react.js·性能优化
每天开心17 分钟前
噜噜旅游App(3)——打造个性化用户中心:AI生成头像与交互设计
前端·前端框架
Heo17 分钟前
调用通义千问大模型实现流式对话
前端·javascript·后端
绅士玖19 分钟前
移动端自适应方案:lib-flexible + postcss-pxtorem 实践指南
前端
中微子22 分钟前
React + Vant 入门指南:轻松构建移动端应用
前端