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

相关推荐
Mintopia几秒前
深入理解 Node.js 中的 fs/promises 模块
前端·javascript·node.js
Aphasia31115 分钟前
前端面试之页面渲染规则📖
前端·面试
星之卡比*19 分钟前
前端知识点---闭包(javascript)
开发语言·前端·javascript
东方芷兰28 分钟前
JavaWeb 课堂笔记 —— 03 Vue
java·前端·javascript·vue.js·笔记
二十秒的勇气35 分钟前
HarmonyOS:组件布局保存至相册
前端
luback1 小时前
页面编辑器CodeMirror初始化不显示行号或文本内容
前端·codemirror
一勺-_-1 小时前
Chrome浏览器和Microsoft Edge浏览器的导出收藏链接
前端·chrome·edge
无名之逆1 小时前
[特殊字符] 超轻高性能的 Rust HTTP 服务器 —— Hyperlane [特殊字符][特殊字符]
java·服务器·开发语言·前端·网络·http·rust
蘑菇头爱平底锅2 小时前
数字孪生-DTS-孪创城市-导览功能、虚拟现实
前端·数据可视化
一口一个橘子2 小时前
[ctfshow web入门] web40
前端·web安全·网络安全