これまではページングを実装するために、データベースから全ての商品を取得していました。しかし、これではページングが遅くなってしまいます。
SQLでページングを実装して効率のよいページングを実現してみましょう。
サーバーアクションで下記のような関数を定義したら、ページングができそうです。
async function getItemsByPage(
itemsPerPage: number
): Promise<{
items: Item[];
isLastPage: boolean;
}>
SQLでOFFSET
を使うと、指定した数だけデータをスキップして取得することができます。最後のページかどうかは、LIMIT
とOFFSET
を使って判断できそうですね。
SELECT * FROM items ORDER BY id ASC LIMIT ? OFFSET ?
動作確認のために一ページあたりの商品数を変更したくなるかもしれません。per_page
というクエリパラメータを追加することで、一ページあたりの商品数を変更することができます。
const perPage = parseInt(searchParams.get("per_page") || "10");