KJ DEV
How to

Vueでシンプルなページングを作る方法とサンプルコード

管理画面を作っていると必要になることが多いページング。

SEOが関係ない場合はVueとAPIで画面構築することも多く、Vueでページングを実装する機会が増えてきました。

そこでVueでページングを作る場合は、最低限どんな情報があれば実装できるのか、シンプルなページングのサンプルを作ってみました。

目次
  1. Vueでページングを作るサンプル
    1. 全体のページ数
    2. 現在のページ数
    3. ページを変更した時のコールバック
  2. Vueでコンポーネント化する時は固有の処理を含めない

Vueでページングを作るサンプル

Vueでページングを実装する時に最低限必要になるのは、3つのオプションです。

  • 全体のページ数(pages)
  • 現在のページ数(current)
  • ページを変更した時のコールバック(onChangePage)

下記が3つのオプションを含めてVueで実装したページングのサンプルコードです。

@[codepen](https://codepen.io/koojy/pen/MXJBLy)

全体のページ数

Vueに限らずページングを作るのに全体のページ数は必ず必要になります。

サンプルではページ数は5として、1から5までのページごとの数字を配列で作成しました。

ページ番号をすべて表示するのではなく、途中に「...」を挟むような場合でも全体で何ページあるか必要な情報のため必須のパラメーターです。

現在のページ数

全体のページ数と合わせて必ず必要になるのが、現在のページ数です。

サンプルでは現在のページ数は下記に使用しています。

  • カレントのページ番号のクラス設定
  • Prev、Nextの出し分け

ページングによってはPrev、Nextは使わない場合においても現在のページ番号を表すのに、その番号のみCSSのスタイルを変更することになるかと思います。

ページを変更した時のコールバック

UIを作るだけなら必要のないパラメーターですが、ページングを使うからには当然ページング番号を変更すると、新しいリストが表示されなくては困ります。

そこでページングの上位のコンポーネントから、コールバックを受け取りページが変更された時はそのページ番号を引数にとり、処理を実行するようにします。

こうすることで一覧データの取得処理をページング内で行う必要がなり、汎用的なコンポーネントにできます。

使用イメージとしては下記のような形です。

1
2
3
4
5
6
7
8
9
10
data: {
  current: 1
},
methods: {
  changePage(page) {
    // 一覧の取得処理を行う

    this.current = page; // カレントを現在のページ番号に設定
  }
}

ページングの上位コンポーネントで現在のページ番号を保持しておき、コールバックで一覧データを更新完了した後にcurrentを設定することで、ページングの方のカレントが更新されます。

Vueでコンポーネント化する時は固有の処理を含めない

Vueでコンポーネント化する時には使い分回しやすいように、アプリケーション固有の処理は含めないようにします。

今回のページングだと一覧データの取得部分が固有な処理にあたります。

パラメーターでコールバックを受け取ったように、固有な処理を外出しにすることで一覧データの取得処理をページング内に記述しなくてもよくなりました。

要件によって今回紹介したサンプルをのパラメーター以外にも、追加情報としてデータを渡すことがあると思います。

そのコンポーネントに必要なものか、アプリケーションに必要なものか、考えて実装をするとメンテナンス性が高く汎用的なコンポーネントを実装できます。

開発で参考になった本

実際に読んでみて開発に役立った本を紹介しています。

これから本格的にデザインシステムを学んで作りたい時にとても参考になる一冊でした。デザインシステムついて幅広く触れられているけど、「tailwindを触ってデザインシステムに興味を持った」という人でも少しずつ取り入れやすいです。