💡

【Next.js】react-id-swiperのautoplayやnavigationが動作しない時の対処法

2021/02/13に公開

Next.jsでreact-id-swiperを利用した際に、自動再生やページ送りが機能しなかったので、解決方法の共有。

環境

ライブラリ名 バージョン
next 10.0.6
react 17.0.1
react-id-swiper 4.0.0
swiper 6.4.11

自動再生が機能しない問題

公式ドキュメントにある自動再生のサンプルコードは次のようになっているが、これだと機能しなかった。

公式のサンプルコード
import React from 'react';
import Swiper from 'react-id-swiper';
const Autoplay = () => {
  const params = {
    spaceBetween: 30,
    centeredSlides: true,
    autoplay: {
      delay: 2500,
      disableOnInteraction: false
    },
    pagination: {
      el: '.swiper-pagination',
      clickable: true
    },
    navigation: {
      nextEl: '.swiper-button-next',
      prevEl: '.swiper-button-prev'
    }
  }
  return (
    <Swiper {...params}>
      <div>Slide #1</div>
      <div>Slide #2</div>
      <div>Slide #3</div>
      <div>Slide #4</div>
      <div>Slide #5</div>
    </Swiper>
  )
};
export default Autoplay;

GitHubのissueを確認すると、Gatsbyの例だが解決方法が載っていた。
結論は、autoplayをswiper本体から直接インポートして利用すれば機能する。
参考:https://github.com/kidjp85/react-id-swiper/issues/469

該当コード
import { Autoplay, Swiper as RealSwiper } from "swiper";
RealSwiper.use([Autoplay]);

余談だが、cssのインポート場所も公式とは若干違ったのでついでに載せておく。

import Swiper from "react-id-swiper";
import "swiper/swiper.min.css";
import "swiper/components/pagination/pagination.min.css";
import { Autoplay, Swiper as RealSwiper } from "swiper";
RealSwiper.use([Autoplay]);

ページ送りが機能しない問題

自動再生と同様に、こちらもswiper本体からインポートして利用すればOK。
ページネーションが表示されない問題も同様。

該当コード
import SwiperCore, { Pagination, Navigation } from "swiper";
SwiperCore.use([Pagination, Navigation]);

パラーメータ等はreact-id-swiper公式ドキュメントの通りにセットすればOK
参考:https://github.com/kidjp85/react-id-swiper/issues/453

まとめ

動かないと思ったらswiper本体からインポートすれば基本動く。(Next.jsと書いているがあんまり関係ないと思う)
react-id-swiperの問題なので、バージョンが上がればいずれ解決するはず。

Discussion