DataTable — это компонент библиотеки Carbon Components Svelte, предназначенный для отображения и управления табличными данными. Он обеспечивает гибкую работу с данными, поддерживает сортировку, фильтрацию, выбор строк, пагинацию и адаптивное отображение на разных устройствах.
Компонент DataTable строится вокруг трех основных элементов:
columns — массив объектов, описывающих столбцы таблицы. Каждый объект содержит следующие ключи:
id — уникальный идентификатор столбца.name — отображаемое имя столбца.sortable (опционально) — возможность сортировки по
этому столбцу (true/false).filterable (опционально) — возможность фильтрации по
этому столбцу (true/false).const columns = [
{ id: 'name', name: 'Имя', sortable: true },
{ id: 'age', name: 'Возраст', sortable: true },
{ id: 'email', name: 'Email' }
];rows — массив объектов, содержащих данные для
каждой строки. Каждый объект должен содержать поля, соответствующие
id столбцов.
const rows = [
{ id: '1', name: 'Иван Иванов', age: 28, email: 'ivan@example.com' },
{ id: '2', name: 'Мария Петрова', age: 34, email: 'maria@example.com' }
];DataTableWrapper — оболочка для таблицы, которая
управляет состоянием и передает необходимые свойства внутрь компонентов
DataTable, TableHead, TableBody и
TableRow.
{({ rows, headers }) => (
)}
Сортировка выполняется через свойство
sortable в объекте столбца. Для реализации сортировки
DataTable использует встроенные функции или кастомные обработчики:
{({ rows, headers, sort }) => (
)}
Фильтрация аналогично задается через свойство
filterable и поддерживается фильтрацией по тексту или
числовым диапазонам.
DataTable поддерживает выделение строк через selection. Доступны следующие режимы:
Пример реализации выбора нескольких строк:
{({ rows, headers, selectedRows }) => (
)}
Для работы с большими наборами данных используется компонент Pagination. Он позволяет управлять количеством строк на странице и переключением между страницами:
DataTable интегрируется с Pagination через реактивные переменные, чтобы отображать только текущую страницу данных.
DataTable можно расширять и настраивать под любые нужды:
Пример кастомной ячейки:
Для больших таблиц рекомендуется:
Все данные DataTable полностью реактивны. Любые изменения в массиве
rows или columns автоматически обновляют
таблицу. Это позволяет динамически добавлять, удалять или изменять
данные без повторного рендеринга всей таблицы.