ページネーションで「戻る」場合はLimitToLastを使う

0

2022年04月18日 17:17

こんにちは、ISSUEの寒河江です。

先日実装したfirestore × Goでページネーションを実装するで「戻る」ページネーションの実装方法についてもお伝えいたしました。その中でなぜLimitToLastを使ったかを詳しくご説明できればと思います。

結論

「戻る」を実装する場合は、LimitToLastを利用して最後からデータを取得する

実例交えて説明します。

前提条件

  • クエリはupdateAtの降順で並び替えされている(order by update desc)

LimitはupdateAtの降順で、新しいもの→古いものの順で取得する

Limitは下記の 「通常」 のように、updateAtの降順で新しいものからLimitした分だけデータを3件取得します。

StartAfterの場合、Limitでうまく機能する

これはStartAfterの時はうまく機能します。下記の 「次へ」 のケースに注目します。StartAfterで指定したupdateAt以降のデータを取得。その後、Limitで更新の新しいものから3件を取得します。これは更新順の古いデータをもう10件取得するというような「次へ」のページネーションの要件を満たしています。

EndBeforeでLimitすると、古いデータが取得されないことがある

しかし、「戻る」ページネーション実装では機能しません。下記の 「戻る」 のケースに注目します。EndBeforeを利用する場合、Limitを利用してもEndBeforeからは取得されません。order byでソートしたupdateAtの降順で取得してしまいます。

LimitToLastで取得データの最後から取得する

解決策としてはLimitToLastを利用しましょう。LimitToLastは取得した最後の要素から指定した分データを取得します。EndBeforeを使用した場合も古いデータからデータを取得してくれます!

以上、ページネーションで「戻る」場合はLimitToLastを使う、でした!

参考

LimitToLast

# Go
# Firestore
# Firebase
0

診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。

目次を見る