@SirotaKazansky
System Analyst

Как архитектурно сделать подгружаемые списки?

Есть backend, есть frontend.
Фронт отображает список чего угодно, транзакций например. Транзакции он берет с бэка.
Транзакций очень много, тянуть сразу все записи на фронт не хочется, поэтому решено подгружать их частями, по мере скролла вниз по списку.

Проблема: Хочется на фронте иметь сортировку записей, но получается что новые подгружаемые записи не сортированы или отсортированы иначе чем выбрал юзер. Перерисовывать весь список целиком не хочется, но чувствую придётся.

Вопрос : может быть есть типовые решения как сделать юзеру удобно и как это архитектурно запланировать (на уровне методов сервисов)?
Пока есть мысль отдать бэку id той записи, на которой в списке стоял юзер, ну или она была в середине видимой части, и запросить "окно" списка таким образом, чтобы эта запись оказалась в том же месте на экране.
  • Вопрос задан
  • 288 просмотров
Пригласить эксперта
Ответы на вопрос 3
Robur
@Robur
Знаю больше чем это необходимо
но получается что новые подгружаемые записи не сортированы или отсортированы иначе чем выбрал юзер


Что вам мешает при запросе транзакций с бека так же отправить с запросом нужную сортировку, чтобы новые записи были отсортированы так же?

Если вы хотите понять что делать при смене сортировки на фронте, то варианты разные - один из них вы озвучили, вполне нормальный, но вам надо будет найти позицию нужного id в новом отсортированом списке. можно просто начинать показывать список заново.

Вообще основных распространенных способов организации подгрузки данных два - страничная загрузка (передаете в запросе номер страницы или индекс записи начала страницы) и курсоры (передаете на бек курсор и количество объектов для загрузки, бек возвращает новый курсор вместе с данными, который используете для последующей загрузки новых данных).
Ответ написан
Комментировать
@SirotaKazansky Автор вопроса
System Analyst
Мы конечно отправим нужную сортировку, и постраничным выводом подгружаем. Проблема в другом, возможно я не точно объяснил.

Допустим Вы пользователь, ищете нужную транзакцию, пролистали пару-тройку сотен. Приходите к выводу что как-то далеко еще листать, надо отсортировать их еще и по паре других параметров, чтобы быстрее найти. Включаете еще параметры сортировки (другой кейс - ошибочно переключили сортировку) и всё исчезло, начинать опять с начала списка.
Вот этого шока хочется избежать:)
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
В несколько этапов:
1. Запрос на сортировку и саму активную запись (id) в позиции "курсора" (или порядковый номер позиции сначала всего списка, если вдруг нет активного "курсора") отправляем на бэк.

2. Делаем запрос сортировки/фильтрации в БД и сохраняем текущий результат выборки во временное хранилище.

3. На фронте, по готовности: забираем сразу список элементов относительно местоположения "курсора" в "окне отображения" (или количества элементов от начала списка), который полностью помещается в это "окно".

4. По мере прокрутки, забираем куски выборки с бэка аяксом (наборы элементов "окна отображения"), расположенные выше или ниже. Этот приём называется "виртуальное окно".
Ответ написан
Ваш ответ на вопрос

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

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