0Pricing
React Academy · Урок

Объединение виртуализации с загрузкой данных

Реализуйте бесконечную прокрутку, запуская загрузку данных, когда виртуализированный список достигает конца.

«Объединение виртуализации с загрузкой данных» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Шаблон бесконечной прокрутки

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

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

Обратный вызов onItemsRendered

Компоненты списков react-window принимают обратный вызов onItemsRendered, сообщающий, какие индексы элементов сейчас отрисованы. Он предоставляет индексы начала и конца видимой области и буферной области предварительной отрисовки.

Этот обратный вызов даёт Вам возможность отслеживать прокрутку и определять, насколько далеко пользователь прокрутил список, не подключая необработанные события прокрутки.

Определение overscanStopIndex рядом с itemCount

Чтобы понять, когда загружать данные, сравните overscanStopIndex из onItemsRendered с текущим itemCount. Когда отображаемое окно приближается к концу загруженных данных, требуются дополнительные данные.

Использование индекса конца буферной области даёт небольшой запас времени и запускает загрузку немного раньше, чем пользователь действительно достигнет самой последней строки.

Запуск загрузки рядом с концом

Когда индекс конца пересекает порог, например оказывается в пределах одного экрана от itemCount, вызывайте функцию загрузки следующей страницы. Защитите этот вызов, чтобы не отправлять несколько перекрывающихся запросов.

Флаг загрузки или проверка того, выполняется ли уже загрузка, предотвращает дублирование запросов, пока пользователь прокручивает список через зону запуска.

Индикатор загрузки как последний элемент

Удобный приём — задавать itemCount равным числу загруженных элементов плюс один, пока существуют дополнительные данные. В дополнительной строке отображается индикатор загрузки, сообщающий о том, что идёт загрузка.

Когда новые данные поступают, количество элементов увеличивается, а строка с индикатором заменяется настоящим содержимым, обеспечивая плавную визуальную обратную связь.

react-window-infinite-loader

Дополнительный пакет react-window-infinite-loader берёт эту логику на себя. Вы передаёте ему isItemLoaded, loadMoreItems и itemCount, а он вызывает Ваш загрузчик, когда пользователь прокручивает список к незагруженным строкам.

Пакет отслеживает, какие диапазоны загружены, и предотвращает повторные вызовы загрузки, упрощая создание надёжной бесконечной прокрутки.

Строки-заполнители во время загрузки

Для незагруженных индексов можно отображать строки-заполнители или скелетные строки вместо пустых областей. Функция отрисовки проверяет, загружен ли элемент по определённому индексу, и показывает скелетную строку, если это не так.

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

Строки ошибок и повторной попытки

Загрузка может завершиться ошибкой, поэтому обрабатывайте ошибки корректно. В конце можно отобразить специальную строку ошибки с кнопкой повторной попытки, которая снова вызывает функцию загрузки для диапазона, завершившегося ошибкой.

Это сохраняет работоспособность списка после сбоя и даёт пользователю понятный способ продолжить работу без перезагрузки всей страницы.

Пагинация по курсору и смещению

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

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

Сочетание с React Query и useInfiniteQuery

React Query и useInfiniteQuery естественно сочетаются с виртуализацией. Они управляют загруженными страницами, следующим курсором, состояниями загрузки и ошибок, а react-window эффективно отображает объединённые страницы.

Вы объединяете страницы в один массив для списка и вызываете fetchNextPage при достижении порога из onItemsRendered, получая кэширование и повторные попытки без дополнительных усилий.

Быстрая проверка: условие запуска бесконечной прокрутки

Определите, когда загружать дополнительные данные в виртуализированном списке с бесконечной прокруткой.

Итоги: виртуализация и загрузка данных

Бесконечная прокрутка загружает страницы, когда пользователь приближается к концу. onItemsRendered сообщает индексы, а сравнение overscanStopIndex с itemCount показывает, когда нужно загружать данные, с защитой от дублирования запросов.

Используйте строки-заполнители и строки ошибок, react-window-infinite-loader для отслеживания состояния, а для динамических данных — пагинацию по курсору. React Query и useInfiniteQuery управляют страницами, курсорами и состояниями наряду с отображением через react-window.

Часто задаваемые вопросы

Урок «Объединение виртуализации с загрузкой данных» бесплатный?

Да — полный текст урока «Объединение виртуализации с загрузкой данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Объединение виртуализации с загрузкой данных»?

Реализуйте бесконечную прокрутку, запуская загрузку данных, когда виртуализированный список достигает конца. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Объединение виртуализации с загрузкой данных»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проблема отрисовки больших списков
  2. FixedSizeList: отрисовка тысяч элементов
  3. VariableSizeList: динамическая высота строк
  4. Объединение виртуализации с загрузкой данных
← Назад к React Academy