イオン+無限反応で無限スクロール
19346 ワード
イオン反応available 今年初めに、私は我々の地域でその特徴のいくつかを紹介しますmeetup 今週の木曜日.これらのうちの1つは無限のscrollerの実装です.そして、それは私が以下のポストであなたと分担しようとしています😃
始める前に
我々はイオン+反応アプリケーションを必要とするソリューションを実装する.あなたがまだ1つを持っていないか、またはちょうどあなたがこのチュートリアルに従うサンプル1を作成したいならば、よく文書化されて、公式documentation それとも、次のコマンドで1を起動します.
ionic start infiniteScroll tabs --type react
始める
新しいアプリケーションを作成するためにイオンによって使用されるスターターキットは3つのタブ、3つのページが含まれています.便利な理由で、ファイル内の最初のタブでソリューションを実装します
./src/pages/Tab1.tsx
.我々は無限のスクロールを実装し、したがってリストを表示しようとしているので、最初に我々がしようとしているのは、我々のアイテムを含んでいなければならないstatent値を追加することです.そのために
useState
フックの反応.また、私たちは、カードを使用してレンダリングされ、我々は何も繰り返されるために残っているときにスクロールを停止するのに役立つ別の状態を追加している.import {
IonContent, IonHeader, IonPage,
IonTitle, IonCard, IonToolbar} from '@ionic/react';
import React, {useState} from 'react';
const Tab1: React.FC = () => {
const [items, setItems] = useState<string[]>([]);
const [disableInfiniteScroll, setDisableInfiniteScroll] =
useState<boolean>(false);
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Tab One</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent>
{items.map((item: string, i: number) => {
return <IonCard key={`${i}`}><img src={item}/>
</IonCard>
})}
</IonContent>
</IonPage>
);
};
フェッチAPI
項目のリストもデータのリストを意味します.我々の特定の例では、我々はDog API , チュートリアル目的のための私の好みのAPIになっていた、そのような情報を取得する.このAPIは無料、オープンソース、任意のトークンとサポートの要求をサポートする必要はありません.
async function fetchData() {
const url: string = 'https://dog.ceo/api/breeds/image/random/10';
const res: Response = await fetch(url);
res
.json()
.then(async (res) => {
if (res && res.message && res.message.length > 0) {
setItems([...items, ...res.message]);
setDisableInfiniteScroll(res.message.length < 10);
} else {
setDisableInfiniteScroll(true);
}
})
.catch(err => console.error(err));
}
この例では、実際の解決策として、任意のページ付けが含まれていないことに注意してください.それはちょうど10ランダム犬を取得します.もちろん、我々のリストで重複しているかもしれません.初期データ読み込み
イオンは、我々のアプリで使用できる複数のライフサイクルイベントを提供します.私が本当に感謝していることは、彼らが標準的なコンポーネントのためにだけでなく、機能的なコンポーネントのためにそのようなイベントを提供しないという事実です.私たちのページが表示されるときにデータを取得するには、我々は
ionViewWillEnter
これは、コンポーネントルーティングが表示にアニメーション化しようとするときに起動されます.import {useIonViewWillEnter} from '@ionic/react';
const Tab1: React.FC = () => {
useIonViewWillEnter(async () => {
await fetchData();
});
};
無限スクロール
チェイスに切りましょう、我々は現在我々の無限のスクロールを加えるつもりです.まず最初に、新しいデータを取得し、操作が完了したことをscrollerに伝えるのを助ける新しい関数を追加します.
async function searchNext($event: CustomEvent<void>) {
await fetchData();
($event.target as HTMLIonInfiniteScrollElement).complete();
}
最後に、イオン無限スクロールコンポーネントをインポートします.import {IonInfiniteScroll, IonInfiniteScrollContent} from '@ionic/react';
そして、これらのコンテンツを以下のようにレンダリングします.<IonInfiniteScroll threshold="100px"
disabled={disableInfiniteScroll}
onIonInfinite={(e: CustomEvent<void>) => searchNext(e)}>
<IonInfiniteScrollContent
loadingText="Loading more good doggos...">
</IonInfiniteScrollContent>
</IonInfiniteScroll>
全部で
私は、上記の手順でコードを分割して実装をよりアクセス可能にしますGitHub 🐩
テスト
すべての計画に従って行った場合は、コマンドラインでアプリケーションを実行すると
ionic serve
, あなたのお気に入りのブラウザでdoggosの無限のリストを参照することができます🎉それほど多くのdoggos
フィルタリング
項目のフィルタリングされたリストを表示するのは、おそらく無限のスクロールとして一般的です.したがって、新しい状態の形でフィルタを追加し、実装に変更します
fetch
アイテムをリセットし、フィルタが適用される場合、指定した品種だけを照会する機能.const [filter, setFilter] = useState<string | undefined>(undefined);
async function fetchData(reset?: boolean) {
const dogs: string[] = reset ? [] : items;
const url: string = filter ?
`https://dog.ceo/api/breed/${filter}/images/random/10` :
'https://dog.ceo/api/breeds/image/random/10';
const res: Response = await fetch(url);
res
.json()
.then(async (res) => {
if (res && res.message && res.message.length > 0) {
setItems([...dogs, ...res.message]);
setDisableInfiniteScroll(res.message.length < 10);
} else {
setDisableInfiniteScroll(true);
}
})
.catch(err => console.error(err));
}
レスポンスフックでデータを取得してリフレッシュする
フィルタに適用され、データをリフレッシュするための変更を観測するために、我々は現在、
useIonViewWillEnter
前に使ったライフサイクルuseEffect
フックの反応.そうすることによって、我々が我々のページに入るとき、データはまだロードされそうです、また、また、州更新に関してフェッチされることになっています.import React, {useState, useEffect} from 'react';
const Tab1: React.FC = () => {
useEffect( () => {
fetchData(true);
}, [filter]);
};
我々は、イオンボタンやラベルをインポートします.import {IonButton, IonLabel} from '@ionic/react';
そして最後にこれらのコンポーネントを使用してリストのフィルタリングをトリガーしますダックスフント.
<IonButton onClick={() => setFilter('dachshund')}>
<IonLabel>Filter</IonLabel>
</IonButton>
全部で
私はアップロードしたデモソリューションの2番目のタブでこのフィルタの例を実装しましたGitHub 🐕
テスト
再度アプリケーションを実行する場合は、ダックスフントだけでリストをフィルタリングすることができます🥳
ダックスフント
ケーキのチェリー🍒🎂
無限のスクロールは、イオン+の素晴らしい機能の一つであり、唯一の私は私のmeetupのために実装しているプロトタイプで使用しているそれらの1つです.さらに、私が構築した小さなアプリケーションは無料でオープンソースであり、試してみるWooof 🐶
無限に🚀
ダビデ
P . S .:私の前で上記の主題を私に提案したために👍
Reference
この問題について(イオン+無限反応で無限スクロール), 我々は、より多くの情報をここで見つけました https://dev.to/daviddalbusco/infinite-scroll-with-ionic-react-3a3iテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol