Ant Design предоставляет гибкие инструменты для работы с таблицами через компонент Table. Одной из важных возможностей является группировка столбцов, которая позволяет создавать иерархическую структуру заголовков, улучшая визуальное восприятие данных и делая интерфейс более организованным.
В Ant Design столбцы таблицы описываются массивом объектов с ключом
columns. Для создания группы столбцов используется свойство
children. Каждый объект столбца может содержать массив
дочерних столбцов, которые будут отображаться под
единым заголовком родителя.
Пример базовой структуры:
const columns = [
{
title: 'Имя пользователя',
dataIndex: 'name',
key: 'name',
},
{
title: 'Контактная информация',
children: [
{
title: 'Email',
dataIndex: 'email',
key: 'email',
},
{
title: 'Телефон',
dataIndex: 'phone',
key: 'phone',
},
],
},
];
В этом примере “Контактная информация” является
группой, объединяющей два столбца: Email и
Телефон.
Группировка создаёт многоуровневые заголовки. Родительский столбец занимает несколько ячеек по горизонтали, соответствующих количеству дочерних столбцов.
При необходимости можно создавать несколько уровней вложенности:
const columns = [
{
title: 'Пользователь',
children: [
{ title: 'Имя', dataIndex: 'firstName', key: 'firstName' },
{ title: 'Фамилия', dataIndex: 'lastName', key: 'lastName' },
],
},
{
title: 'Контакты',
children: [
{
title: 'Адрес',
children: [
{ title: 'Город', dataIndex: 'city', key: 'city' },
{ title: 'Страна', dataIndex: 'country', key: 'country' },
],
},
{ title: 'Телефон', dataIndex: 'phone', key: 'phone' },
],
},
];
Здесь таблица имеет трёхуровневую структуру заголовков, что позволяет логически группировать данные по категориям.
Свойство colSpan и
rowSpan Ant Design автоматически рассчитывает
объединение ячеек для родительских столбцов, но при необходимости их
можно явно задать через colSpan и rowSpan.
const columns = [
{
title: 'Статистика',
children: [
{ title: 'Количество', dataIndex: 'count', key: 'count', colSpan: 2 },
{ title: 'Процент', dataIndex: 'percent', key: 'percent' },
],
},
];
В этом примере первый дочерний столбец объединяет две ячейки, а второй остаётся отдельным.
Сортировка и фильтры в группированных столбцах Дочерние столбцы сохраняют все стандартные возможности:
sorter для сортировкиfilters и onFilter для фильтрацииРодительский столбец не наследует функционал дочерних автоматически; его задача — только визуальная группировка.
Фиксированные столбцы и ширина Для корректного
отображения группированных столбцов рекомендуется задавать
ширину (width) для всех уровней.
Фиксированные столбцы (fixed: 'left' или
fixed: 'right') работают аналогично обычным, но важно
помнить, что ширина всех дочерних столбцов суммируется для родительского
заголовка.
Группировка может быть создана динамически на основе данных:
const groupKeys = ['email', 'phone', 'city', 'country'];
const columns = [
{ title: 'Имя', dataIndex: 'name', key: 'name' },
{
title: 'Контакты',
children: groupKeys.map(key => ({
title: key.charAt(0).toUpperCase() + key.slice(1),
dataIndex: key,
key,
})),
},
];
Такой подход полезен для универсальных таблиц, где структура данных заранее неизвестна или часто меняется.
Кастомные рендеры заголовка Можно использовать
title как функцию или JSX-компонент:
{
title: () => <span style={{ color: 'red' }}>Контакты</span>,
children: [
{ title: 'Email', dataIndex: 'email', key: 'email' },
{ title: 'Телефон', dataIndex: 'phone', key: 'phone' },
],
}Использование иконок и элементов управления В заголовках удобно размещать иконки, кнопки сортировки или фильтры напрямую через JSX, что повышает интерактивность таблицы.
key для каждого столбца — это важно для
корректной работы виртуального DOM.Группировка столбцов в Ant Design — мощный инструмент для структурирования данных и повышения читаемости интерфейса. Она сочетается с сортировкой, фильтрацией, кастомными рендерами и фиксированными столбцами, создавая гибкие и визуально понятные таблицы.