Компонент Table является ключевым элементом библиотеки Ant Design для отображения структурированных данных в виде таблиц. Он предоставляет мощные возможности для сортировки, фильтрации, пагинации и кастомизации ячеек.
Для начала необходимо импортировать компонент Table и связанный тип данных:
import { Table } from 'antd';
Базовая структура таблицы включает два основных элемента:
Пример базовой таблицы:
const columns = [
{
title: 'Имя',
dataIndex: 'name',
key: 'name',
},
{
title: 'Возраст',
dataIndex: 'age',
key: 'age',
},
{
title: 'Адрес',
dataIndex: 'address',
key: 'address',
},
];
const data = [
{
key: '1',
name: 'Иван Иванов',
age: 32,
address: 'Москва, ул. Ленина, 10',
},
{
key: '2',
name: 'Мария Петрова',
age: 28,
address: 'Санкт-Петербург, ул. Невский, 5',
},
];
<Table columns={columns} dataSource={data} />;
Каждая колонка может быть настроена через следующие свойства:
Пример использования render для форматирования
ячеек:
const columns = [
{
title: 'Имя',
dataIndex: 'name',
key: 'name',
render: (text) => <strong>{text}</strong>,
},
{
title: 'Возраст',
dataIndex: 'age',
key: 'age',
render: (age) => `${age} лет`,
},
];
Ant Design поддерживает встроенную сортировку и фильтрацию:
const columns = [
{
title: 'Имя',
dataIndex: 'name',
key: 'name',
sorter: (a, b) => a.name.localeCompare(b.name),
},
{
title: 'Возраст',
dataIndex: 'age',
key: 'age',
sorter: (a, b) => a.age - b.age,
filters: [
{ text: 'До 30', value: '30' },
{ text: '30 и старше', value: '30+' },
],
onFilter: (value, record) => {
if (value === '30') return record.age < 30;
return record.age >= 30;
},
},
];
Сортировка работает через функцию sorter, а фильтры
задаются через массив объектов filters и функцию
onFilter.
Компонент Table автоматически поддерживает
пагинацию. Параметры можно настроить через объект
pagination:
<Table
columns={columns}
dataSource={data}
pagination={{ pageSize: 5, showSizeChanger: true, pageSizeOptions: ['5', '10', '20'] }}
/>
Для взаимодействия с таблицей часто требуется возможность выбора строк:
const rowSelection = {
onChange: (selectedRowKeys, selectedRows) => {
console.log('Выбранные ключи:', selectedRowKeys);
console.log('Выбранные строки:', selectedRows);
},
};
<Table rowSelection={rowSelection} columns={columns} dataSource={data} />;
Свойство rowSelection позволяет включать чекбоксы,
отслеживать выбранные строки и настраивать поведение выбора.
Объединение ячеек выполняется через свойства colSpan и
rowSpan в функции render:
const columns = [
{
title: 'Имя',
dataIndex: 'name',
key: 'name',
render: (text, record, index) => ({
children: text,
props: { rowSpan: index % 2 === 0 ? 2 : 0 },
}),
},
];
Для отображения дополнительной информации можно использовать
expandedRowRender:
<Table
columns={columns}
dataSource={data}
expandedRowRender={(record) => <p>Подробная информация: {record.address}</p>}
/>
Стили таблицы настраиваются через CSS-классы и встроенные свойства:
className — добавление кастомного класса таблице.rowClassName — кастомизация стилей строк через
функцию.scroll — горизонтальная и вертикальная прокрутка.Пример горизонтального скролла:
<Table
columns={columns}
dataSource={data}
scroll={{ x: 1200, y: 300 }}
/>
Для работы с динамическими данными часто используется
useEffect и загрузка данных через API:
const [data, setData] = useState([]);
const [loading, setLoading] = useState(false);
useEffect(() => {
setLoading(true);
fetch('https://api.example.com/users')
.then((res) => res.json())
.then((data) => setData(data))
.finally(() => setLoading(false));
}, []);
<Table columns={columns} dataSource={data} loading={loading} />;
Свойство loading показывает индикатор загрузки, пока
данные не получены.
Для добавления действий, таких как кнопки «Редактировать» или
«Удалить», используется render с компонентами Ant
Design:
const columns = [
{
title: 'Действия',
key: 'action',
render: (_, record) => (
<Space size="middle">
<Button onCl ick={() => editUser(record.key)}>Редактировать</Button>
<Button danger onCl ick={() => deleteUser(record.key)}>Удалить</Button>
</Space>
),
},
];
Использование компонента Space позволяет красиво выровнять элементы внутри ячейки.
Ant Design поддерживает отображение иерархических таблиц через
свойство children в объектах данных:
const data = [
{
key: '1',
name: 'Иван Иванов',
age: 32,
children: [
{ key: '1-1', name: 'Дочерний элемент', age: 5 },
],
},
];
<Table columns={columns} dataSource={data} />;
Вложенные строки автоматически отображаются с отступами и могут быть расширены пользователем.
Этот подход обеспечивает полную кастомизацию таблиц, поддержку больших наборов данных и удобное взаимодействие с пользователем. Компонент Table в Ant Design сочетает гибкость и мощные встроенные возможности, позволяя строить как простые, так и сложные интерфейсы с минимальными усилиями.