0Pricing
React Academy · Урок

Выбор строк и виртуализированные таблицы

Добавляйте выбор строк флажками и объединяйте TanStack Table с TanStack Virtual для отображения больших наборов данных

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

Включение выбора строк

Добавьте столбец выбора в массив ColumnDef, используя идентификатор 'select'. Ячейка отображает флажок, связанный с row.getToggleSelectedHandler(). Заголовок отображает флажок выбора всех строк, используя table.getToggleAllRowsSelectedHandler().

Также передайте в useReactTable состояние rowSelection и обработчик onRowSelectionChange.

Проверка состояния выбора

row.getIsSelected() возвращает true, когда строка выбрана, поэтому его удобно использовать для применения выделенного фона к выбранным строкам.

row.getIsSomeSelected() обрабатывает неопределённое состояние флажка, когда выбраны только некоторые строки в группе; это полезно для сгруппированных таблиц.

Получение выбранных строк

table.getSelectedRowModel().rows возвращает массив всех выбранных в данный момент объектов строк. У каждой строки есть свойство row.original, содержащее исходный объект данных.

Так создаются кнопки массовых действий, работающие с выбранным набором, например «Удалить выбранные» или «Экспортировать выбранные».

Шаблон интерфейса массовых действий

Отображайте кнопки действий условно, проверяя table.getSelectedRowModel().rows.length > 0. Если строки не выбраны, скройте или отключите панель массовых действий, чтобы не создавать запутанные взаимодействия с пустым состоянием.

Показывайте в интерфейсе количество выбранных строк: «Выбрано строк: {count}» — это помогает пользователям понимать текущее состояние выбора.

Зачем виртуализировать таблицы

Отрисовка 10 000 строк в виде узлов DOM выполняется крайне медленно. Браузеру приходится размещать, отрисовывать и поддерживать тысячи элементов. Пользователи сталкиваются с рывками при прокрутке и медленной первоначальной отрисовкой.

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

Установка TanStack Virtual

Установите @tanstack/react-virtual вместе с @tanstack/react-table. Это отдельные библиотеки, разработанные для совместной работы. TanStack Table управляет логикой данных, а TanStack Virtual — тем, какие элементы отрисовываются в DOM.

Точкой интеграции служит массив строк из table.getRowModel().rows.

Настройка useVirtualizer

Вызовите useVirtualizer({ count: table.getRowModel().rows.length, getScrollElement: () => tableContainerRef.current, estimateSize: () => 35 }). Параметр count определяет количество виртуальных элементов и соответствует текущему количеству строк таблицы после применения всех фильтров.

estimateSize предоставляет начальную оценку высоты строки; фактические высоты измеряются по мере отрисовки строк.

Отрисовка виртуальных элементов

Вызовите virtualizer.getVirtualItems(), чтобы получить только строки, которые должны находиться в DOM в данный момент. Выполните обход этого массива, получите настоящую строку через table.getRowModel().rows[virtualRow.index] и отрисуйте только эти элементы tr.

У каждого виртуального элемента есть свойство start для абсолютного позиционирования внутри контейнера прокрутки.

Добавление пустых div-элементов

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

Эти невидимые div-элементы заполняют пространство, которое занимали бы неотрисованные строки, благодаря чему пропорции полосы прокрутки остаются правильными.

Динамическая высота строк с measureElement

Передайте в useVirtualizer measureElement: el => el.getBoundingClientRect().height, чтобы точно измерять динамическую высоту строк. Ссылка на каждую строку прикрепляется к элементу tr, поэтому виртуализатор измеряет её фактическую отрисованную высоту.

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

Объединение всех возможностей

TanStack Table с сортировкой, фильтрацией, постраничной разбивкой, выбором строк и TanStack Virtual легко сочетается в единой конфигурации. Количество строк, передаваемое в useVirtualizer, должно браться из table.getRowModel().rows после обработки данных всеми активными моделями строк.

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

Выбор строк в TanStack Table

Какой метод возвращает исходные объекты данных для всех выбранных в данный момент строк?

Итоги урока

Для выбора строк используется столбец с флажками, обработчик getToggleSelectedHandler, состояние rowSelection и table.getSelectedRowModel().rows для доступа к выбранным данным. Виртуализация с useVirtualizer отрисовывает только видимые строки, используя getVirtualItems, пустые div-элементы и необязательный measureElement для динамической высоты.

Все возможности TanStack Table — сортировка, фильтрация, постраничная разбивка и выбор — легко сочетаются с виртуальной отрисовкой.

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

Урок «Выбор строк и виртуализированные таблицы» бесплатный?

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

Чему я научусь в уроке «Выбор строк и виртуализированные таблицы»?

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

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

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

Сколько времени занимает урок «Выбор строк и виртуализированные таблицы»?

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

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

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

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

  1. Философия TanStack Table и бессодержательный дизайн
  2. Определение столбцов и отображение строк
  3. Сортировка, фильтрация и разбиение на страницы
  4. Выбор строк и виртуализированные таблицы
← Назад к React Academy