Библиотека Ant Design (Antd) предоставляет мощные
возможности для управления таблицами через компонент Table.
Одной из ключевых функций является выделение строк,
которое позволяет пользователю визуально отмечать выбранные элементы, а
также получать их данные для дальнейшей обработки.
Для реализации выделения строк используется объект
rowSelection, который передается в компонент
Table. Основные свойства:
type – определяет тип выделения:
"checkbox" – множественный выбор."radio" – выбор одной строки.selectedRowKeys – массив ключей выделенных строк. Используется для контроля выбранных элементов.
onChange – функция обратного вызова при изменении выделения, принимает два аргумента: массив ключей и массив объектов выделенных строк.
getCheckboxProps – позволяет задать индивидуальные свойства для чекбоксов каждой строки, например, блокировать выделение.
Пример базовой конфигурации rowSelection:
const rowSelection = {
type: 'checkbox',
selectedRowKeys,
onChange: (selectedKeys, selectedRows) => {
setSelectedRowKeys(selectedKeys);
setSelectedRows(selectedRows);
},
getCheckboxProps: (record) => ({
disabled: record.name === 'Disabled User', // запрет выбора для конкретной строки
}),
};
Компонент Table принимает rowSelection как
пропс, что позволяет включить функциональность выделения строк:
<Table
rowSelection={rowSelection}
columns={columns}
dataSource={data}
/>
title, dataIndex, key,
render и другие).key.Помимо стандартных чекбоксов, можно реализовать выделение строки при
клике по ней. Для этого используется свойство onRow:
<Table
rowSelection={rowSelection}
columns={columns}
dataSource={data}
on Row={(record) => ({
onClick: () => {
const newSelectedKeys = selectedRowKeys.includes(record.key)
? selectedRowKeys.filter(k => k !== record.key)
: [...selectedRowKeys, record.key];
setSelectedRowKeys(newSelectedKeys);
},
})}
/>
Ant Design автоматически поддерживает выделение всех строк через чекбокс в заголовке таблицы. Однако можно управлять этим программно:
const selectAll = () => {
const allKeys = data.map(item => item.key);
setSelectedRowKeys(allKeys);
};
const deselectAll = () => {
setSelectedRowKeys([]);
};
selectAll формирует массив всех ключей строк.deselectAll очищает массив выбранных строк.Эти функции можно привязать к кнопкам для быстрого управления выделением.
Ant Design позволяет кастомизировать внешний вид выделенных строк с
помощью свойства rowClassName:
<Table
rowSelection={rowSelection}
columns={columns}
dataSource={data}
rowClassName={(record) => selectedRowKeys.includes(record.key) ? 'selected-row' : ''}
/>
CSS пример:
.selected-row {
background-color: #e6f7ff;
}
selectedRowKeys и selectedRows обычно
хранятся в состоянии компонента через useState. Это дает
возможность:
Пример динамического обновления:
useEffect(() => {
if (filterActive) {
const filteredKeys = data.filter(item => item.active).map(item => item.key);
setSelectedRowKeys(filteredKeys);
} else {
setSelectedRowKeys([]);
}
}, [filterActive, data]);
useEffect отслеживает изменение фильтра.Иногда требуется запретить выделение отдельных строк. Для этого
используется getCheckboxProps:
getCheckboxProps: (record) => ({
disabled: record.status === 'inactive',
})
Ключевые события:
Пример:
const rowSelection = {
onChange: (keys, rows) => console.log('Выделенные строки:', rows),
onSelect: (record, selected) => console.log(record, selected),
onSelectAll: (selected, rows) => console.log('Все строки выделены:', selected),
};
Выделение строк корректно работает с пагинацией и фильтрацией, если
selectedRowKeys хранится глобально:
Механизм rowSelection в Ant Design обеспечивает гибкое и мощное управление выделением строк. Он поддерживает как стандартные чекбоксы, так и кастомное поведение по клику, динамическое обновление, стилизацию, ограничения выбора и обработку событий. Этот функционал позволяет строить сложные таблицы с интуитивным интерфейсом и полной интеграцией с бизнес-логикой приложения.