仮想スクロール
ion-virtual-scroll
をお探しですか?ion-virtual-scroll
はv6.0.0で非推奨となり、v7.0.0で削除されました。以下で詳しく説明するVirtuosoパッケージを使用することをお勧めします。
Ionic Reactアプリで検討すべき仮想スクロールソリューションの1つは、Virtuosoです。このガイドでは、Ionic ReactアプリケーションにVirtuoso
をインストールし、他のIonicコンポーネントと併用する方法について説明します。
インストール
仮想スクローラーを設定するには、まずreact-virtuoso
をインストールします。
npm install react-virtuoso
使用方法
Virtuosoにはいくつかのコンポーネントが含まれていますが、この例ではVirtuoso
コンポーネントを使用します。このコンポーネントは、IonContent
コンポーネント内に追加する必要があります。
import React from 'react';
import { Virtuoso } from 'react-virtuoso';
import { IonAvatar, IonContent, IonItem, IonLabel, IonPage } from '@ionic/react';
const Home: React.FC = () => (
<IonPage>
<IonContent>
<Virtuoso
style={{ height: '100%' }}
totalCount={100}
itemContent={(index) => {
return (
<div style={{ height: '56px' }}>
<IonItem>
<IonAvatar slot="start">
<img src="https://picsum.photos/seed/picsum/40/40" />
</IonAvatar>
<IonLabel>{index}</IonLabel>
</IonItem>
</div>
);
}}
/>
</IonContent>
</IonPage>
);
export default Home;
ページにVirtuoso
コンポーネントを追加した後、仮想スクロールコンテナのサイズを定義する必要があります。この場合、コンテナが画面の全高を占めるようにするには、style={{ height: '100%' }}
を追加します。
次に、レンダリングするアイテムの総数をtotalCount
プロパティで定義します。
そこから、`itemContent`プロパティを使用して、仮想スクロールコンテンツの各アイテムをレンダリングするために呼び出される関数を渡すことができます。
ここで重要なのは、`IonItem`コンポーネントをラップする`div`です。Ionicコンポーネントを遅延読み込みする場合、コンポーネントは読み込まれているがスタイルが読み込まれていないフレームがいくつかある場合があります。これが発生すると、コンポーネントの寸法は`0`になり、Virtuosoはエラーをスローする可能性があります。これは、Virtuosoがレンダリングする各アイテムに明確な位置を必要とするため、コンポーネントの寸法が`0`の場合、それを決定できないためです。
Ionicコンポーネントと併用する場合
Ionic Frameworkでは、折りたたみ可能なラージタイトル、ion-infinite-scroll
、ion-refresher
、ion-reorder-group
などの機能をion-content
内で使用する必要があります。これらのエクスペリエンスを仮想スクロールで使用するには、仮想スクロールビューポートに.ion-content-scroll-host
クラスを追加する必要があります。
例えば
<IonPage>
<IonContent scrollY={false}>
<Virtuoso className="ion-content-scroll-host">{/* Your existing content and configurations */}</Virtuoso>
</IonContent>
</IonPage>
参考資料
このガイドでは、Virtuoso
の機能のごく一部しか説明していません。詳細については、Virtuosoのドキュメントを参照してください。