React Splide
Reactインテグレーション
概要
React SplideはSplideをReactプロジェクトに導入するためのパッケージです。
インストール
最新版をNPMから取得してください。
$ npm install @splidejs/react-splide
$ npm install @splidejs/react-splide
使用方法
コンポーネント
パッケージから、SplideとSplideSlideの2つのコンポーネントをインポートします。
import{Splide,SplideSlide}from'@splidejs/react-splide';JavaScript
import { Splide, SplideSlide } from '@splidejs/react-splide';
これらを、以下のようにしてレンダリングしてください。
<Splide><SplideSlide><imgsrc="image1.jpg"alt="Image 1"/></SplideSlide><SplideSlide><imgsrc="image2.jpg"alt="Image 2"/></SplideSlide></Splide>JSX
<Splide>
<SplideSlide>
<img src="image1.jpg" alt="Image 1"/>
</SplideSlide>
<SplideSlide>
<img src="image2.jpg" alt="Image 2"/>
</SplideSlide>
</Splide>
CSS
CSSファイルを選択し、インポートしてください。<link>タグで読み込んでも構いません。
import'@splidejs/splide/dist/css/splide.min.css';// またはimport'@splidejs/splide/dist/css/themes/splide-skyblue.min.css';JavaScript
import '@splidejs/splide/dist/css/splide.min.css'; // または import '@splidejs/splide/dist/css/themes/splide-skyblue.min.css';
Props
id
id: stringルート要素のIDを決めます。
className
className: stringルート要素に追加するクラスです。
options
options: OptionsSplideのオプション をオブジェクトで渡します。
<Splideoptions={{rewind:true,width:800,gap:'1rem',}}></Splide>JSX
<Splide
options={ {
rewind: true,
width : 800,
gap : '1rem',
} }
>
</Splide>
このプロパティはリアクティブであり、値を更新するとスライダー自身も更新されますが、読み取り専用のオプションは変更しないでください。
Extensions
Extensions: Record<string, ComponentConstructor>エクステンションをオブジェクト形式で追加します。
Transition
Transition: ComponentConstructorトランジションコンポーネントを上書きます。
hasSliderWrapper
hasSliderWrapper: booleanトラック要素をスライダー要素で囲むかどうかを決めます。
hasAutoplayProgress
hasAutoplayProgress: boolean自動再生のプログレスバーをレンダリングするかどうかを決めます。
hasAutoplayControls
hasAutoplayControls: boolean自動再生の再生・停止ボタンをレンダリングするかどうかを決めます。
playButtonLabel
playButtonLabel: string = 'Play'再生ボタンに使用するラベルを設定します。
pauseButtonLabel
pauseButtonLabel: string = 'Pause'停止ボタンに使用するラベルを設定します。
renderControls
renderControls: () => ReactNode | ReactNodeArrayトラック要素の後に任意の要素をレンダリングするための関数です。たとえば矢印をカスタマイズする場合などに用います。
<SpliderenderControls={()=>(<divclassName="splide__arrows"><buttonclassName="splide__arrow splide__arrow--prev"></button><buttonclassName="splide__arrow splide__arrow--next"></button></div>)}>JSX
<Splide
renderControls={ () => (
<div className="splide__arrows">
<button className="splide__arrow splide__arrow--prev">
</button>
<button className="splide__arrow splide__arrow--next">
</button>
</div>
) }
>
イベント
Splideコンポーネント経由で、Splide内のすべてのイベントにハンドラを登録できます。ハンドラの関数名はイベント名から生成されますが、"on"接頭子の付加、キャメルケースへの変換、コロンの削除という3つの処理が行われます。たとえば、"arrows:mounted"は"onArrowsMounted"に変換されます。
実際のイベントリストは、このソースから確認できます。
<SplideonArrowsMounted={(splide,prev,next)=>{console.log(prev,next)}}>JSX
<Splide onArrowsMounted={ ( splide, prev, next ) => { console.log( prev, next ) } }>
なお、ハンドラの第一引数は常にSplideのインスタンスで、オリジナルの引数はそのあとに続きます。
Splideインスタンスの取得
Splideインスタンスを取得し、直接操作したい場合は、React.createRefメソッドまたはuseRefフックによるRefオブジェクトを介して取得できます。
<Splideref={ref}>...</Splide>JSX
<Splide ref={ ref }>
...
</Splide>
ReactがSplideコンポーネントをマウントした後で、ref.current.splideからインスタンスを取得してください(マウント前はundefinedです)。
componentDidMount(){if(this.ref.current){console.log(this.ref.current.splide.length);}}// またはuseEffect(()=>{if(ref.current){console.log(ref.current.splide.length);}});JSX
componentDidMount() {
if ( this.ref.current ) {
console.log( this.ref.current.splide.length );
}
}
// または
useEffect( () => {
if ( ref.current ) {
console.log( ref.current.splide.length );
}
} );
サンプル
以下に簡単な例を示します。
1234567891011121314151617181920212223importReactfrom'react';import{Splide,SplideSlide}from'@splidejs/react-splide';exportdefault()=>{return(<Splideoptions={{rewind:true,gap:'1rem',}}><SplideSlide><imgsrc="image1.jpg"alt="Image 1"/></SplideSlide><SplideSlide><imgsrc="image2.jpg"alt="Image 2"/></SplideSlide><SplideSlide><imgsrc="image3.jpg"alt="Image 3"/></SplideSlide></Splide>);}JSX
import React from 'react';
import { Splide, SplideSlide } from '@splidejs/react-splide';
export default () => {
return (
<Splide
options={ {
rewind: true,
gap : '1rem',
} }
>
<SplideSlide>
<img src="image1.jpg" alt="Image 1"/>
</SplideSlide>
<SplideSlide>
<img src="image2.jpg" alt="Image 2"/>
</SplideSlide>
<SplideSlide>
<img src="image3.jpg" alt="Image 3"/>
</SplideSlide>
</Splide>
);
}