FixedSizeList: отрисовка тысяч элементов
Настройте FixedSizeList из react-window для строк одинаковой высоты и подключите его к своим данным.
«FixedSizeList: отрисовка тысяч элементов» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Установка react-window
Добавить react-window в проект можно с помощью менеджера пакетов, например установив пакет react-window. Он небольшой и не имеет тяжёлых зависимостей.
После установки импортируйте нужные компоненты списка, чаще всего FixedSizeList для строк, имеющих одинаковую высоту.
Обязательные свойства FixedSizeList
Для работы FixedSizeList нужны несколько свойств: высота и ширина определяют контейнер прокрутки, itemCount — количество элементов, а itemSize — высоту каждой строки в пикселях.
Свойство дочернего содержимого представляет собой функцию рендеринга, которая отрисовывает одну строку. Благодаря этому компонент получает нужные сведения о геометрии для правильной виртуализации.
Функция рендеринга строки
Функция рендеринга дочернего содержимого получает объект с индексом и стилем. Индекс указывает, какой элемент нужно отрисовать, чтобы можно было найти соответствующие данные, а стиль задаёт положение строки в виртуальном списке.
Вы возвращаете JSX для одной строки, а react-window вызывает эту функцию только для строк, находящихся в видимой области.
Критически важное свойство стиля
Свойство стиля необходимо и должно быть применено к элементу строки. react-window размещает каждую строку абсолютно, используя верхнее смещение, чтобы поместить её в правильное положение внутри высокого контейнера прокрутки.
Если не применить стиль, все строки окажутся в одном положении, и виртуализация визуально перестанет работать.
Забытый стиль нарушает работу всего
Самая распространённая ошибка при работе с react-window — не передать свойство стиля строке. Список будет выглядеть сломанным: строки наложатся друг на друга вверху, а прокрутка начнёт работать неправильно.
Всегда передавайте или присваивайте предоставленный стиль внешнему элементу строки, чтобы сохранить правильное позиционирование.
Передача данных через itemData
Вместо того чтобы захватывать массив внутри функции рендеринга, можно передать его через свойство itemData. Затем react-window передаёт его строке как поле данных вместе с индексом и стилем.
Так компонент строки не зависит напрямую от источника данных, а мемоизация может стать проще, поскольку строка получает данные явно.
Горизонтальное направление
FixedSizeList поддерживает горизонтальные списки: для этого свойству макета задают горизонтальное значение либо используют параметры направления — в зависимости от версии. В таком случае itemSize обозначает ширину, а не высоту.
Это удобно для горизонтально прокручиваемых каруселей или временных шкал, которые также содержат много элементов.
overscanCount
Свойство overscanCount отрисовывает несколько дополнительных строк сразу за пределами видимой области. Этот буфер снижает вероятность появления пустого места при быстрой прокрутке, пока новые строки ещё не смонтированы.
Небольшой буфер делает взаимодействие плавнее, а слишком большой сводит пользу на нет, монтируя слишком много строк за пределами экрана.
AutoSizer для адаптивных контейнеров
FixedSizeList нужны явные размеры в пикселях, что неудобно в адаптивных макетах. Вспомогательный компонент AutoSizer измеряет родительский элемент и передаёт списку ширину и высоту через свойство-функцию рендеринга.
Если обернуть список в AutoSizer, он заполнит гибкий контейнер без жёстко заданных размеров и будет адаптироваться к изменениям макета.
Сборка FixedSizeList
Рабочая конфигурация FixedSizeList задаёт высоту, ширину, itemCount и itemSize и отрисовывает строки с помощью функции, применяющей свойство стиля. При необходимости AutoSizer передаёт размеры, а overscanCount добавляет буфер.
После этого список любой длины хранит смонтированными только видимые строки, а прокрутка остаётся плавной.
Быстрая проверка: обязательные свойства FixedSizeList
Вспомните, какие сведения нужно передать FixedSizeList для правильного рендеринга строк.
Повторение: FixedSizeList
FixedSizeList отрисовывает строки одинаковой высоты, используя высоту, ширину, itemCount, itemSize и функцию рендеринга дочернего содержимого, которая получает индекс и стиль. Применять свойство стиля обязательно, иначе строки наложатся друг на друга.
Передавайте данные через itemData, поддерживайте горизонтальный макет, добавляйте небольшой буфер overscanCount и используйте AutoSizer для заполнения адаптивных контейнеров без жёстко заданных размеров.
Часто задаваемые вопросы
Урок «FixedSizeList: отрисовка тысяч элементов» бесплатный?
Да — полный текст урока «FixedSizeList: отрисовка тысяч элементов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «FixedSizeList: отрисовка тысяч элементов»?
Настройте FixedSizeList из react-window для строк одинаковой высоты и подключите его к своим данным. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «FixedSizeList: отрисовка тысяч элементов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проблема отрисовки больших списков
- FixedSizeList: отрисовка тысяч элементов
- VariableSizeList: динамическая высота строк
- Объединение виртуализации с загрузкой данных