Как узнать все страницы в Firestore? - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь реализовать разбиение на страницы с помощью Firestore с фильтрацией + упорядочением по внешнему интерфейсу, но элементы страницы должны загружаться после нажатия на нужную страницу вместо загрузки всех данных и разбивки на страницы в браузере.

Один вариантразбиение на страницы в Firestore - это курсоры, в которых мне нужно знать конкретный элемент (DocumentSnapshot.data()), чтобы запросить startAfter / startAt / endAt / endBefore для загрузки следующей страницы ИЛИ значения полей, с которых начинается этот запрос, в порядке их запроса.

  1. Что, если мне нужно загрузить 3-ю страницу из 10?
  2. Как я могу узнать, какие страницы есть, не выбирая все элементы?
  3. И главный вопрос- по какому элементу я должен разбить на страницы с помощью startAfter?

Теперь мой код работает с таким алгоритмом: при каждом фильтре / заказе изменений я выбираю ВСЕХ пользователей из Firestore, таких как при начальной выборке, и вычисляю, какой элементЯ должен использовать в startAfter при загрузке любой из страниц.Ну, этот метод работает, но он побеждает цель нумерации страниц.Это очень плохая практика, но она выполнима.

PS есть метод offset в облачной бэкэнд-библиотеке , но в библиотеке внешнего интерфейса он отсутствует.И есть проблема на GitHub говорит, что это не может быть реализовано на фронте. один

1 Ответ

0 голосов
/ 20 февраля 2019

Что, если мне нужно загрузить 3-ю страницу из 10?

Если вы собираетесь использовать бесконечную прокрутку, для доступа к 3-й странице вам следует прокрутить вниз, пока не дойдете до 3-йстр.Если это не то, что вам нужно, вы должны реализовать классический алгоритм разбиения на страницы, где вы должны получить общее количество элементов, разделить его на количество элементов на странице и отобразить Page1, Page 2 и так далее.На мой взгляд, первый подход более элегантный, поскольку его используют все веб-приложения и мобильные приложения.

Как узнать, сколько там страниц?

Согласноколичество элементов, которые вы хотите иметь на странице, вы можете определить количество страниц.

pageNumber = totalNumberOfItems/numberOfItemsPerPage

И главный вопрос - на каком элементе я должен разбивать страницы на startAfter?

Для этого не существует фиксированного номера.Вы должны выбрать этот номер в соответствии с вариантом использования вашего приложения.Самое главное, что это число должно быть больше, чем общее количество элементов, которые вы хотите отобразить на странице.Допустим, общее количество элементов, которые помещаются на странице на странице, равно 10, тогда число должно быть 12 или 15.

Редактировать:

Я пытаюсь реализовать разбиение на страницы с помощью Firestore с фильтрацией + упорядочением по внешнему интерфейсу, но элементы страницы должны загружаться после нажатия на нужную страницу, а не загружать все данные и разбивать их на страницы в браузере.

При разговореЧто касается разбиения на страницы, это означает, что мы говорим о том, как получать данные небольшими порциями, а не загружать все данные на клиенте.Это означает, что вместо того, чтобы получать все данные, мы получаем небольшую их часть один раз.Поэтому изначально мы создаем запрос на получение данных, используя вызов функции limit(15), чтобы мы могли получить только 15 элементов.Как только вы получите эти 15 элементов, по нажатию кнопки загрузите другие 15 элементов и т. Д. До конца каждого из них.

Если вы знаете Android, я рекомендую вам увидеть мой ответ в этом post , где я объяснил рекомендованный способ разбивки запросов на страницы путем объединения курсоров запросов с методом limit() при нажатии кнопки.

...