IonSlidesからSwiper.jsへの移行
IonSlides
をお探しですか?IonSlides
はv6.0.0で非推奨となり、v7.0.0で削除されました。Swiper.jsライブラリを直接使用することをお勧めします。移行プロセスについては、以下で詳しく説明します。
最新のタッチスライダーコンポーネントが必要な場合は、Swiper.jsをお勧めします。このガイドでは、Ionic FrameworkアプリケーションでReact向けSwiperを設定する方法について説明します。また、IonSlides
から公式のSwiper React統合に移行するために必要な移行情報についても説明します。
SwiperのReactコンポーネントは、将来のSwiperリリースで削除され、代わりにSwiper Elementが使用される予定です。ただし、このガイドでは、執筆時点では最も安定したエクスペリエンスを提供するため、Reactコンポーネントへの移行方法を示します。特に、ReactはまだWeb Componentsを強くサポートしていません。
Swiper.jsをIonic Frameworkで使用するために、SwiperのReactコンポーネントを使用することは必須ではありません。
はじめに
まず、Ionicの最新バージョンにアップデートしてください
npm install @ionic/react@latest @ionic/react-router@latest
それが完了したら、プロジェクトにSwiperの依存関係をインストールします
npm install swiper@latest
Create React Appを使用する開発者は、Swiperの最新バージョンでreact-scripts
v5.0.0+を使用する必要があります。
スタイリッシュなスワイプ
次に、基本のSwiperスタイルをインポートする必要があります。また、Ionicが提供するスタイルもインポートします。これにより、IonSlides
で使用したのと同じCSS変数を使用してSwiperスタイルをカスタマイズできます。
Swiperが使用されているコンポーネントでスタイルをインポートすることをお勧めします。これにより、スタイルが必要な場合にのみロードされるようになります
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
...
);
};
export default Home;
Swiper.jsをIonicで使用するために、@ionic/react/css/ionic-swiper.css
をインポートすることは必須ではありません。このファイルはIonSlides
コンポーネントとの後方互換性のために使用されており、スタイルシートで提供されるCSS変数を使用しない場合は、安全に省略できます。
セレクターの更新
以前は、ion-slides
とion-slide
をターゲットにして、カスタムスタイリングを適用することができました。これらのスタイルブロックの内容は変わりませんが、セレクターを更新する必要があります。以下は、ion-slides
からSwiper Reactに移行する際のセレクターの変更リストです。
ion-slidesセレクター | Swiperセレクター |
---|---|
ion-slides | .swiper |
ion-slide | .swiper-slide |
プリプロセッサ(オプション)
SCSSまたはLessスタイルを使用する開発者向けに、Swiperはこれらのファイルのインポートも提供します。
Lessスタイルの場合は、Swiperのインポートパスでcss
をless
に置き換えます
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/less';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
...
);
};
export default Home;
SCSSスタイルの場合は、Swiperのインポートパスでcss
をscss
に置き換えます
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/scss';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
...
);
};
export default Home;
コンポーネントの使用
Swiperは、Swiper
とSwiperSlide
の2つのコンポーネントをエクスポートします。Swiper
コンポーネントはIonSlides
と同等で、SwiperSlide
はIonSlide
と同等です。
これらのコンポーネントはswiper/react
からインポートされます
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
モジュールの使用
デフォルトでは、React版Swiperは追加のモジュールをインポートしません。ナビゲーションやページネーションなどのモジュールを使用するには、まずそれらをインポートする必要があります。
IonSlides
には、ページネーション、スクロールバー、自動再生、キーボード、ズームモジュールが自動的に含まれていました。このガイドでは、これらのモジュールをインストールする方法を示します。
まず、swiper
パッケージからモジュールと対応するCSSファイルをインポートする必要があります
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Autoplay, Keyboard, Pagination, Scrollbar, Zoom } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/autoplay';
import 'swiper/css/keyboard';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import 'swiper/css/zoom';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
次に、Swiper
コンポーネントのmodules
プロパティを使用して、これらのモジュールをSwiperに提供する必要があります
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Autoplay, Keyboard, Pagination, Scrollbar, Zoom } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/autoplay';
import 'swiper/css/keyboard';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import 'swiper/css/zoom';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper modules={[Autoplay, Keyboard, Pagination, Scrollbar, Zoom]}>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
最後に、適切なプロパティを使用することで、これらの機能をオンにできます
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Autoplay, Keyboard, Pagination, Scrollbar, Zoom } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/autoplay';
import 'swiper/css/keyboard';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import 'swiper/css/zoom';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper
modules={[Autoplay, Keyboard, Pagination, Scrollbar, Zoom]}
autoplay={true}
keyboard={true}
pagination={true}
scrollbar={true}
zoom={true}
>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
モジュールの完全なリストについては、https://swiper.dokyumento.jp/react#usageを参照してください。
IonicSlidesモジュール
IonSlides
では、IonicがSwiperの多数のプロパティを自動的にカスタマイズしました。これにより、モバイルデバイスでスワイプする際にスムーズなエクスペリエンスが得られました。Swiperを直接使用する場合もこれらのプロパティが設定されるように、IonicSlides
モジュールを使用することをお勧めします。ただし、このモジュールを使用することは、IonicでSwiper.jsを使用するために必須ではありません。
IonicSlides
によって設定されたプロパティを確認し、カスタマイズするものを決定することをお勧めします。
IonicSlides
モジュールをインストールするには、@ionic/react
からインポートし、modules
配列の最後の項目として渡します
import React from 'react';
import { IonContent, IonPage, IonicSlides } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Autoplay, Keyboard, Pagination, Scrollbar, Zoom } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/autoplay';
import 'swiper/css/keyboard';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import 'swiper/css/zoom';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper
modules={[Autoplay, Keyboard, Pagination, Scrollbar, Zoom, IonicSlides]}
autoplay={true}
keyboard={true}
pagination={true}
scrollbar={true}
zoom={true}
>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
IonicSlides
モジュールは、配列の最後のモジュールである必要があります。これにより、ページネーション、スクロールバー、ズームなどのモジュールの設定を自動的にカスタマイズできます。
プロパティ
Swiperオプションは、IonSlides
のoptions
オブジェクトを介してではなく、<Swiper>
コンポーネントに直接プロップとして提供されます。
IonSlides
を使用したアプリで、slidesPerView
とloop
オプションが設定されていたとします
const MyComponent: React.FC = () => {
return (
<IonSlides
options={{
slidesPerView: 3,
loop: true,
}}
>
<IonSlide>Slide 1</IonSlide>
<IonSlide>Slide 2</IonSlide>
<IonSlide>Slide 3</IonSlide>
</IonSlides>
);
};
移行するには、これらのオプションをoptions
オブジェクトから取り出し、<Swiper>
コンポーネントにプロパティとして直接指定します
const MyComponent: React.FC = () => {
return (
<Swiper slidesPerView={3} loop={true}>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
);
};
以下は、IonSlides
からSwiper Reactに移行する際のプロパティの変更リストです。
名前 | 注釈 |
---|---|
オプション | 各オプションを<Swiper> コンポーネントに直接プロパティとして設定します。 |
モード | モードに基づいて異なるスタイルを適用するには、CSSで.ios .swiper または.md .swiper をターゲットにできます。 |
ページャー | 代わりにpagination プロパティを使用してください。Paginationモジュールのインストールが必要です。 |
スクロールバー | 引き続きscrollbar プロパティを使用できますが、最初にScrollbarモジュールをインストールしてください。 |
Swiper Reactで利用可能なすべてのプロパティは、https://swiper.dokyumento.jp/react#swiper-propsにあります。
イベント
Swiper
コンポーネントはIonic Frameworkによって提供されないため、イベント名にはonIonSlide
プレフィックスは付きません。
IonSlides
を使用しているアプリで、onIonSlideDidChange
イベントを使用したとしましょう。
const MyComponent: React.FC = () => {
return (
<IonSlides onIonSlideDidChange={() => onSlideChange()}>
<IonSlide>Slide 1</IonSlide>
<IonSlide>Slide 2</IonSlide>
<IonSlide>Slide 3</IonSlide>
</IonSlides>
);
};
移行するには、イベントの名前をonSlideChange
に変更します。
const MyComponent: React.FC = () => {
return (
<Swiper onSlideChange={() => onSlideChange()}>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
);
};
以下は、IonSlides
からSwiper Reactに移行する際のイベント名の変更の完全なリストです。
IonSlidesイベント | Swiperイベント |
---|---|
onIonSlideWillChange | onSlideChangeTransitionStart |
onIonSlideDidChange | onSlideChangeTransitionEnd |
onIonSlideDoubleTap | onDoubleTap |
onIonSlideDrag | onSliderMove |
onIonSlideNextStart | onSlideNextTransitionStart |
onIonSlideNextEnd | onSlideNextTransitionEnd |
onIonSlidePrevStart | onSlidePrevTransitionStart |
onIonSlidePrevEnd | onSlidePrevTransitionEnd |
onIonSlideReachStart | onReachBeginning |
onIonSlideReachEnd | onReachEnd |
onIonSlideTap | onTap |
onIonSlideTouchStart | onTouchStart |
onIonSlideTouchEnd | onTouchEnd |
onIonSlideTransitionStart | onTransitionStart |
onIonSlideTransitionEnd | onTransitionEnd |
onIonSlidesDidLoad | onInit |
Swiperで利用可能なすべてのイベントは、https://swiper.dokyumento.jp/swiper-api#eventsにあります。
メソッド
ほとんどのメソッドは削除され、代わりにSwiper
のプロパティに直接アクセスするようになりました。
これらのプロパティへのアクセスは、Reactコンポーネントではなく、Swiperインスタンス自体のプロパティにアクセスする必要があるため、少しトリッキーになる場合があります。これを行うには、onSwiper
を使用してSwiper
インスタンスへの参照を取得することをお勧めします。
import React, { useState } from 'react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Swiper as SwiperInterface } from 'swiper';
...
const Home: React.FC = () => {
const [swiperInstance, setSwiperInstance] = useState<SwiperInterface>();
return (
...
<Swiper
onSwiper={(swiper) => setSwiperInstance(swiper)}
>
...
</Swiper>
)
};
export default Home;
ここから、Swiperインスタンスのプロパティにアクセスする場合は、swiperInstance
にアクセスします。たとえば、isBeginning
プロパティを確認する場合は、swiperInstance.isBeginning
と記述できます。ただし、swiperInstance
が最初に定義されていることを確認してください!
以下は、IonSlides
からSwiper Reactに移行する際のメソッドの変更の完全なリストです。
IonSlidesメソッド | 注釈 |
---|---|
getActiveIndex() | 代わりにactiveIndex プロパティを使用してください。 |
getPreviousIndex() | 代わりにpreviousIndex プロパティを使用してください。 |
getSwiper() | onSwiper を使用してSwiperインスタンスへの参照を取得します。上記の例を参照してください。 |
isBeginning() | 代わりにisBeginning プロパティを使用してください。 |
isEnd() | 代わりにisEnd プロパティを使用してください。 |
length() | 代わりにslides プロパティを使用してください。(例:swiperRef.slides.length) |
lockSwipeToNext() | 代わりにallowSlidesNext プロパティを使用してください。 |
lockSwipeToPrev() | 代わりにallowSlidePrev プロパティを使用してください。 |
lockSwipes() | 代わりにallowSlideNext 、allowSlidePrev 、およびallowTouchMove プロパティを使用してください。 |
startAutoplay() | 代わりにautoplay プロパティを使用してください。 |
stopAutoplay() | 代わりにautoplay プロパティを使用してください。 |
エフェクト
キューブやフェードなどのエフェクトを使用している場合は、他のモジュールと同様にインストールできます。この例では、フェードエフェクトを使用します。まず、swiper
からEffectFade
をインポートし、modules
配列に指定します。
import React from 'react';
import { IonContent, IonPage, IonicSlides } from '@ionic/react';
import { EffectFade } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper modules={[EffectFade, IonicSlides]}>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
次に、エフェクトに関連付けられたスタイルシートをインポートする必要があります。
import React from 'react';
import { IonContent, IonPage, IonicSlides } from '@ionic/react';
import { EffectFade } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css';
import 'swiper/css/effect-fade';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper modules={[EffectFade, IonicSlides]}>
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
その後、swiper
のeffect
プロパティを"fade"
に設定することでアクティブ化できます。
import React from 'react';
import { IonContent, IonPage, IonicSlides } from '@ionic/react';
import { EffectFade } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css';
import 'swiper/css/effect-fade';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper modules={[EffectFade, IonicSlides]} effect="fade">
<SwiperSlide>Slide 1</SwiperSlide>
<SwiperSlide>Slide 2</SwiperSlide>
<SwiperSlide>Slide 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
Swiperのエフェクトの詳細については、https://swiper.dokyumento.jp/react#effectsを参照してください。
まとめ
Swiperがインストールされたので、新しいSwiper機能をお楽しみいただけます。まずはSwiper Reactの紹介から始め、次にSwiper APIドキュメントを参照することをお勧めします。
よくある質問
この移行の例はどこにありますか?
ion-slides
と対応するSwiperの使用例を含むサンプルアプリは、https://github.com/ionic-team/slides-migration-samplesにあります。
この移行に関するヘルプはどこで入手できますか?
移行で問題が発生した場合は、Ionicフォーラムに投稿してください。
バグレポートはどこに提出すればよいですか?
問題を提起する前に、SwiperディスカッションボードまたはIonicフォーラムに投稿して、コミュニティによって問題を解決できるかどうかを確認してください。
Swiperライブラリで問題が発生している場合は、新しいバグをSwiperリポジトリに提出する必要があります:https://github.com/nolimits4web/swiper/issues
IonicSlides
モジュールで問題が発生している場合は、新しいバグをIonic Frameworkリポジトリに提出する必要があります:https://github.com/ionic-team/ionic-framework/issues