Skip to content

List リスト - Vant 4

📋 List リスト ​

🎯 紹介 ​

List コンポーネントは、「スマートな滝」🌊 のようなものです!ユーザーのスクロール行動を自動的に感知し、ユーザーがリストの底部に近づくと、魔法使いのように自動的により多くのコンテンツを「出現」させます。商品リスト、ニュース情報、SNSの動的コンテンツなど、どんな場面でもスムーズな無限スクロール体験を提供し、ユーザーをコンテンツの海に没頭させます!

📦 導入 ​

以下の方法でコンポーネントをグローバルに登録します。詳細な登録方法についてはコンポーネントの登録を参照してください。

js
import { createApp } from'vue'; import { List } from'vant'; const app = createApp(); app.use(List);

🚀 コードサンプル ​

🔧 基本的な使い方 ​

List コンポーネントは loading と finished の2つの変数でロード状態を制御します。まるでリストに「スマートブレイン」🧠 を搭載したかのようです!コンポーネントが底部までスクロールすると、load イベントがトリガーされ、loading が true に設定されます。この時点で非同期操作を開始してデータを更新し、データの更新が完了したら、loading を false に設定するだけです。データがすべてロード済みの場合は、単純に finished を true に設定するだけです。

html
js
import { ref } from'vue'; exportdefault { setup() { const list = ref([]); const loading = ref(false); const finished = ref(false); constonLoad = () => { // 非同期でデータを更新// setTimeout は例示用であり、実際のシナリオでは通常 ajax リクエストを使用しますsetTimeout(() => { for (let i = 0; i < 10; i++) { list.value.push(list.value.length + 1); } // ロード状態を終了する loading.value = false; // データがすべてロード完了if (list.value.length >= 40) { finished.value = true; } }, 1000); }; return { list, onLoad, loading, finished, }; }, };

❌ エラーメッセージ ​

リストデータのロードに失敗した場合、error を true に設定するだけでエラーメッセージを表示できます。まるでユーザーに親切な「再試行ボタン」🔄 を提供するかのようです!ユーザーがエラーメッセージをクリックすると、load イベントが再トリガーされ、失敗を再開の機会に変えます。

html
js
import { ref } from'vue'; exportdefault { setup() { const list = ref([]); const error = ref(false); const loading = ref(false); constonLoad = () => { fetchSomeThing().catch(() => { loading.value = false; error.value = true; }); }; return { list, error, onLoad, loading, }; }, };

🔄 プルリフレッシュ ​

List コンポーネントは PullRefresh コンポーネントと組み合わせて使用することができ、プルリフレッシュの効果を実現します。まるでリストに「タイムマシン」を搭載したかのようで、ユーザーは簡単に最新のコンテンツを取得できます!

html
js
import { ref } from'vue'; exportdefault { setup() { const list = ref([]); const loading = ref(false); const finished = ref(false); const refreshing = ref(false); constonLoad = () => { setTimeout(() => { if (refreshing.value) { list.value = []; refreshing.value = false; } for (let i = 0; i < 10; i++) { list.value.push(list.value.length + 1); } loading.value = false; if (list.value.length >= 40) { finished.value = true; } }, 1000); }; constonRefresh = () => { // リストデータを空にする finished.value = false; // データを再ロード// loading を true に設定して、ロード中の状態を示す loading.value = true; onLoad(); }; return { list, onLoad, loading, finished, onRefresh, refreshing, }; }, };

API ​

Props ​

パラメータ説明型デフォルト値
v-model:loadingロード中の状態かどうか。ロード中は load イベントはトリガーされませんbooleanfalse
v-model:errorロードに失敗したかどうか。ロードに失敗すると、エラーメッセージをクリックすると load イベントが再トリガーされますbooleanfalse
finishedすべてのデータがロード済みかどうか。ロード完了後は load イベントはトリガーされませんbooleanfalse
offsetスクロールバーが底部から offset よりも小さい距離にあるときに load イベントをトリガーnumber | string300
loading-textロード中のメッセージstring読み込み中...
finished-textロード完了後のメッセージstring-
error-textロード失敗後のメッセージstring-
immediate-check初期化時にスクロール位置を即座にチェックするかどうかbooleantrue
disabledスクロールロードを無効にするかどうかbooleanfalse
directionスクロールによるロードのトリガー方向。オプションは upstringdown
scroller v4.6.4スクロールイベントを監視するノードを指定します。デフォルトは直近の親スクロールノードですElement-

Events ​

イベント名説明コールバックパラメータ
loadスクロールバーが底部から offset よりも小さい距離にあるときにトリガー-

メソッド ​

ref を使用して List インスタンスを取得し、インスタンスメソッドを呼び出すことができます。詳細はコンポーネントインスタンスメソッドを参照してください。

メソッド名説明パラメータ戻り値
check現在のスクロール位置をチェックします。底部までスクロールされている場合は、load イベントがトリガーされます--

型定義 ​

コンポーネントは以下の型定義をエクスポートしています:

ts
importtype { ListProps, ListInstance, ListDirection } from'vant';

ListInstance はコンポーネントインスタンスの型で、以下のように使用します:

ts
import { ref } from'vue'; importtype { ListInstance } from'vant'; const listRef = ref<ListInstance>(); listRef.value?.check();

Slots ​

名前説明
defaultリストのコンテンツ
loadingカスタム底部ローディングメッセージ
finishedカスタムロード完了後のメッセージ
errorカスタムロード失敗後のメッセージ

テーマカスタマイズ ​

スタイル変数 ​

コンポーネントは以下の CSS 変数を提供しており、カスタムスタイルに使用できます。使用方法については ConfigProvider コンポーネント を参照してください。

名前デフォルト値説明
--van-list-text-colorvar(--van-text-color-2)-
--van-list-text-font-sizevar(--van-font-size-md)-
--van-list-text-line-height50px-
--van-list-loading-icon-size16px-

よくある質問 ​

List の動作メカニズムは何ですか? ​

List はブラウザのスクロールイベントを監視し、リストの位置を計算します。リストの底部と表示領域の距離が offset より小さくなると、List は load イベントを1回トリガーします。

なぜ List の初期化後にすぐに load イベントがトリガーされるのですか? ​

List の初期化後、最初の画面のデータをロードするために load イベントが1回トリガーされます。この機能は immediate-check 属性で無効にすることができます。

なぜ load イベントが連続してトリガーされるのですか? ​

1回のリクエストでロードされるデータの数が少なく、リストのコンテンツが現在の画面を埋めることができない場合、List はコンテンツが画面を埋めるかデータがすべてロードされるまで、引き続き load イベントをトリガーします。

したがって、取得するデータの数を調整する必要があります。理想的には、1回のリクエストで取得するデータの数は、画面の高さを埋めるのに十分なものである必要があります。

loading と finished はそれぞれどういう意味ですか? ​

List には以下の3つの状態があります。これらの状態を理解すると、List コンポーネントを正しく使用するのに役立ちます:

  • 非ロード中、loading が false:このとき、リストのスクロール位置に基づいて load イベントをトリガーするかどうかが判断されます(リストコンテンツが1画面未満の場合、直接トリガーされます)。
  • ロード中、loading が true:非同期リクエストを送信中であることを示します。このとき、load イベントはトリガーされません。
  • ロード完了、finished が true:このとき、load イベントはトリガーされません。

各リクエストが完了したら、loading を false に手動で設定して、ロードが終了したことを示す必要があります。

float レイアウトを使用すると、ロードが継続的にトリガーされるのはなぜですか? ​

List のコンテンツが float レイアウトを使用している場合、容器に van-clearfix クラス名を追加してフロートをクリアすることで、List が要素の位置を正しく判断できるようになります。

html

html、body に overflow を設定すると、ロードが継続的にトリガーされるのはなぜですか? ​

html タグと body タグに overflow-x: hidden スタイルを設定すると、List がロードを継続的にトリガーする可能性があります。

css
html, body { overflow-x: hidden; }

この問題の原因は、要素に overflow-x: hidden スタイルを設定すると、その要素の overflow-y がブラウザによってデフォルトの visible ではなく auto に設定され、List がスクロールコンテナを正しく判断できなくなるためです。解決策は、このスタイルを削除するか、html タグと body タグに height: 100% スタイルを追加することです。

direction 属性を up に設定すると、ロードが継続的にトリガーされるのはなぜですか? ​

direction 属性を up に設定すると、スクロールバーがページの上部にあるときに、List コンポーネントのロードがトリガーされます。

したがって、この属性を使用する場合は、データのロードが完了するたびに、スクロールバーをページの下部または上部以外の位置にスクロールすることをお勧めします。

📚 関連ドキュメント ​

🔄 インタラクションコンポーネント ​

📋 リスト関連 ​

  • Cell セル - セルコンポーネント。リストアイテムを構築する基本コンポーネント
  • IndexBar インデックスバー - インデックスバーコンポーネント。長いリストの高速位置特定ツール

🚀 パフォーマンス最適化 ​

🎨 デザインコンポーネント ​

🛠️ 開発ガイド ​

Vant に基づく企業向けモバイルソリューション