PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как отобразить пользователю большое количество данных приходящих с Backend?

Продвинутые темы

Большое количество данных с бэкенда отображают через: пагинацию, бесконечный скролл, виртуализацию списков, ленивую загрузку. Главное — не рендерить всё сразу.

Способы

Пагинация

Разбить данные на страницы, грузить и показывать по частям:

GET /items?page=2&limit=20
  • Плюсы: просто, предсказуемо, можно прыгать на страницу.
  • Когда: таблицы, каталоги.

Бесконечный скролл

Подгружать следующую порцию при приближении к концу (через IntersectionObserver):

new IntersectionObserver(loadMore).observe(sentinel);
  • Когда: ленты, feed.

Виртуализация (windowing)

Рендерить только видимые элементы, а не весь список (react-window, react-virtualized, TanStack Virtual):

// Из 10000 элементов рендерятся только ~20 видимых
<FixedSizeList itemCount={10000} itemSize={50}>...</FixedSizeList>
  • Нужна для очень больших списков: DOM не перегружается.
  • Когда: тысячи элементов.

Ленивая загрузка

Грузить данные/детали по требованию (при раскрытии, скролле).

Серверная фильтрация/поиск

Не грузить всё — фильтровать/искать на сервере, показывать релевантное.

Комбинация (обычно)

  • Пагинация/бесконечный скролл (грузить порциями с сервера) +
  • Виртуализация (рендерить только видимое) +
  • TanStack Query (кеш, useInfiniteQuery).

Дополнительно

  • Дебаунс поиска/фильтров.
  • Скелетоны/индикаторы загрузки.
  • Мемоизация элементов списка.

Коротко для собеседования

Большие данные отображают: пагинация (страницы — таблицы), бесконечный скролл (подгрузка при скролле через IntersectionObserver — ленты), виртуализация (рендер только видимых элементов — react-window/TanStack Virtual, нужна для тысяч элементов), ленивая загрузка, серверная фильтрация. Обычно комбинируют: подгрузка порциями + виртуализация + TanStack Query (useInfiniteQuery). Не рендерить всё сразу.

Другие вопросы раздела