2020
07/26

ページネーションコンポーネント(ページ遷移ごとにデータを取得するタイプ)

ページネーションは通常のサイトでもWebアプリでもほとんどの場合に必要となる定番のパーツです。
頻出するからこそ、できるだけ簡単に設置できてカスタマイズもしやすいように、ということでページネーションの実装について考えてみました。

実際に動作するデモ
※何かキーワードを入力して検索してみてください。

ADs

要件

1ページごとにデータを取得し直す

データを全件取得して指定件数ごとに分割して多ページに分割するという方法もありますが、APIからのデータ取得件数に上限があったり総データ数が数千~数万になる場合は厳しいのではないかと思います。
そこでページ遷移ごとに1ページ分ずつデータを取得する方法を取りました。

hashchangeは使わない

#1のときは1ページ目、#2のときは2ページ目とハッシュによってページ数を指定する方法は指定ページへの直リンクができるのでいい方法ですが、同一ページに複数のページネーションがある場合に使えませんので今回は見送りました。

ページネーションパーツのみ別コンポーネントにする

設置や管理のことを考えるとコンポーネントとし、親コンポーネントに埋め込むように扱えるほうがいいでしょう。

実際のコード

親コンポーネント

コンポーネント設置部分は以下のようにpropsで必要データを渡します。

APIからのデータ取得はこの親コンポーネントで行います。
そこで得られた件数などの必要なデータをページネーションコンポーネントに渡します。

ページネーションコンポーネント

ページネーション本体は以下のように

・1ページ目、最終ページへのリンク
・前後のページへのリンク
・カレントページが中央に来る

という見た目です。

※ Bootstrap4での使用を想定しています。

Props

Propsは変数名を定義するだけです。

Computed

Computedでは

・ページ番号の計算
・ページ数の計算

を行います。

methods

methodsではページネーションをクリックしたときのsetPage(ページ番号)という関数を定義するだけです。
現在のページ数をページネーションコンポーネントに保存しつつ、親コンポーネントに$emitで送信します。

これでページネーションが動作するようになりました。

APIからのデータ取得部分だけは扱うAPIによって書き換える必要がありますが、それ以外の部分は汎用的に使えるのではないかと思います。

おまけ:コード全文

デモで使っているコードそのままです。

ページネーションコンポーネント

ページネーションを設置する親コンポーネント

「api.php」は楽天商品検索APIの結果をecho file_get_contents()しているだけです。
(API KEYを隠すためだけの対応)

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。