@AndrewRusinas

Пагинация в firebase?

Как сделать пагинацию в firebase? У firebase отсутствуют аналоги count и skip, что не позволяет просто ввести номер страницы и получить нужный отрезок записей. Есть метод startAfter, который требует, чтобы мы указывали там конкретную запись, после которой нам нужно искать другие записи.
Текущие механизмы годятся для бесконечного скролла, когда нам точно известна эта самая предыдущая запись. Но что делать, когда нужно получать записи базируясь по url? (например "url.com/blog/3")

Загружать все записи и вырезать из массива? Бред. А как узнать, сколько у нас всего страниц? Каждый раз загружать все записи и посчитать? Опять бред.
  • Вопрос задан
  • 704 просмотра
Пригласить эксперта
Ответы на вопрос 2
KickeRocK
@KickeRocK
FrontFinish
Так загрузите 1 раз все записи и потом "делите".
Как сделать пагинацию в firebase? У firebase отсутствуют аналоги count и skip, что не позволяет просто ввести номер страницы и получить нужный отрезок записей.

Напишите сами: получаете общее кол-во записей - делите на кол-во записей, которое должно быть на странице = кол-во страниц.
Есть метод startAfter, который требует, чтобы мы указывали там конкретную запись, после которой нам нужно искать другие записи.Загружать все записи и вырезать из массива? Бред. А как узнать, сколько у нас всего страниц? Каждый раз загружать все записи и посчитать? Опять бред.

Тут(2016 год!!!) написано, что есть limitToFirst(N).
Зная записи-на-страницу - получаем те, которые должны отображаться.
Ответ написан
Комментировать
@AntonPolyakin
Я немного дополню ответ. В Firebase Database REST API есть параметр запроса shallow=true, который позволяет получать данные в виде списка идентификаторов. Этот список выглядит так:
{
-M9yIcQN7_DgcYVCBl6b: true,
-MAlDOMreZGUdg7quSjY: true,
-MAlDRLIsXnuF3zhgQyz: true,
-MABPqHqh7S0Gc4EKwLs: true,
...
}

Это довольно компактный формат данных. Чтобы сделать пагинацию, необходимо отсортировать этот список в алфавитном порядке, а потом "делить". Это единственный возможный вариант, но, так как данные представлены в компактном виде, то загрузка всех записей, даже если у вас их несколько тысяч, не будет большой проблемой, особенно если ваш проект является SPA приложением. В SPA вы можете обойтись без повторных GET запросов на адрес (https://[PROJECT_ID].firebaseio/.json?shallow=true), вы просто можете оправить запрос 1 раз (при инициализации), сохранить ответ сервера и использовать список идентификаторов для генерации страниц.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы