В библиотеке Ant Design сортировка и фильтрация реализованы прежде всего через компонент Table. Эти механизмы позволяют управлять отображением данных без необходимости ручной обработки всего массива, обеспечивая гибкость и интерактивность интерфейса.
Для активации сортировки используется свойство sorter в
колонках таблицы. Оно может принимать функцию сравнения или булевое
значение для использования стандартной сортировки по типу данных.
Пример базовой сортировки по числовому полю:
import { Table } from 'antd';
const data = [
{ key: 1, name: 'Алексей', age: 32 },
{ key: 2, name: 'Мария', age: 28 },
{ key: 3, name: 'Иван', age: 45 },
];
const columns = [
{
title: 'Имя',
dataIndex: 'name',
key: 'name',
},
{
title: 'Возраст',
dataIndex: 'age',
key: 'age',
sorter: (a, b) => a.age - b.age,
},
];
<Table dataSource={data} columns={columns} />;
Особенности сортировки:
sortOrder позволяет задать начальный порядок сортировки
(ascend или descend).sorter должна возвращать отрицательное число,
ноль или положительное, аналогично стандартной функции
compare в JavaScript.Фильтрация в Ant Design настраивается через свойства
filters и onFilter в колонках таблицы. Это
позволяет пользователю выбирать только интересующие записи.
Пример фильтрации по имени:
const columns = [
{
title: 'Имя',
dataIndex: 'name',
key: 'name',
filters: [
{ text: 'Алексей', value: 'Алексей' },
{ text: 'Мария', value: 'Мария' },
],
onFilter: (value, record) => record.name.includes(value),
},
{
title: 'Возраст',
dataIndex: 'age',
key: 'age',
},
];
Ключевые моменты фильтрации:
filters — массив объектов с text
(отображаемое название) и value (значение для
фильтрации).onFilter — функция, которая возвращает
true, если запись должна отображаться, и
false, если нет.Для управления сортировкой и фильтрацией из кода применяется свойство
sorter вместе с onChange. Это позволяет
синхронизировать сортировку с серверными данными или локальным
состоянием компонента.
const [sortedInfo, setSortedInfo] = useState({});
const [filteredInfo, setFilteredInfo] = useState({});
const handleChange = (pagination, filters, sorter) => {
setSortedInfo(sorter);
setFilteredInfo(filters);
};
<Table
columns={columns}
dataSource={data}
onCha nge={handleChange}
/>;
sorter в handleChange содержит поля
columnKey, order и field.filters — объект с активными фильтрами по
колонкам.Ant Design поддерживает фильтры с чекбоксами для выбора нескольких значений:
filters: [
{ text: 'Алексей', value: 'Алексей' },
{ text: 'Мария', value: 'Мария' },
{ text: 'Иван', value: 'Иван' },
],
onFilter: (value, record) => record.name.includes(value),
filterMultiple: true
filterMultiple по умолчанию true,
позволяет выбрать несколько фильтров.filterMultiple: false.Ant Design позволяет комбинировать оба механизма в одной таблице. При
этом обработка данных может быть как клиентской, так и серверной. Для
серверной фильтрации и сортировки используется onChange,
где можно отправлять параметры фильтров и сортировок на сервер и
получать уже отсортированные и отфильтрованные данные.
const handleTableChange = (pagination, filters, sorter) => {
fetchData({
sortField: sorter.field,
sortOrder: sorter.order,
filters: filters,
page: pagination.current
});
};
Преимущества такого подхода:
Ant Design позволяет менять внешний вид фильтров и сортировок:
['ascend', 'descend']).Пример кастомного фильтра:
{
title: 'Имя',
dataIndex: 'name',
key: 'name',
filterDropdown: ({ setSelectedKeys, selectedKeys, confirm }) => (
<div style={{ padding: 8 }}>
<input
value={selectedKeys[0]}
onCha nge={e => setSelectedKeys(e.target.value ? [e.target.value] : [])}
/>
<button onCl ick={confirm}>Применить</button>
</div>
),
onFilter: (value, record) => record.name.includes(value),
}
Это позволяет создавать сложные интерфейсы фильтрации, например, с поиском по подстроке, диапазонами дат или кастомными селекторами.
При работе с большими таблицами рекомендуется:
pagination).rowKey для идентификации строк и оптимизации
ререндеринга.React.memo для колонок с кастомными
компонентами, чтобы избежать лишних пересчетов.С помощью встроенных механизмов Ant Design можно реализовать гибкую, интерактивную таблицу с полноценной сортировкой и фильтрацией, полностью контролируемой как на клиенте, так и на сервере. Эти возможности обеспечивают удобство работы с данными и масштабируемость приложений.