Компонент Cascader используется для выбора значения из иерархических списков. Он особенно удобен при работе с вложенными категориями, регионами, подкатегориями товаров или любыми данными с несколькими уровнями вложенности. В Ant Design Cascader реализован как контрол с поддержкой поиска, динамической загрузки данных и кастомизации отображения элементов.
Для корректной работы Cascader требуется массив объектов с определённой структурой:
const options = [
{
value: 'zhejiang',
label: 'Zhejiang',
children: [
{
value: 'hangzhou',
label: 'Hangzhou',
children: [
{
value: 'xihu',
label: 'West Lake',
},
],
},
],
},
{
value: 'jiangsu',
label: 'Jiangsu',
children: [
{
value: 'nanjing',
label: 'Nanjing',
children: [
{
value: 'zhonghuamen',
label: 'Zhong Hua Men',
},
],
},
],
},
];
Ключевые моменты структуры:
value — уникальный идентификатор элемента, используемый
для управления состоянием.label — отображаемый текст.children — массив дочерних элементов для следующего
уровня вложенности.import { Cascader } from 'antd';
function App() {
const onCha nge = (value, selectedOptions) => {
console.log(value, selectedOptions);
};
return <Cascader options={options} onCha nge={onChange} placeholder="Выберите элемент" />;
}
Пояснение:
options — массив данных.onChange — коллбэк, вызываемый при выборе элемента.
value — массив выбранных значений,
selectedOptions — массив объектов выбранной цепочки.placeholder — текст-заполнитель до выбора
значения.Для работы с большим набором данных можно загружать дочерние элементы только при раскрытии родительского:
const loadData = selectedOptions => {
const targetOption = selectedOptions[selectedOptions.length - 1];
targetOption.loading = true;
setTimeout(() => {
targetOption.loading = false;
targetOption.children = [
{ value: 'dynamic1', label: 'Dynamic 1' },
{ value: 'dynamic2', label: 'Dynamic 2' },
];
setOptions([...options]);
}, 1000);
};
Используется свойство loadData:
<Cascader options={options} loadData={loadData} changeOnSelect placeholder="Выберите значение" />;
changeOnSelect позволяет выбирать элементы на
промежуточных уровнях без обязательного спуска до последнего
уровня.targetOption.loading показывает индикатор
загрузки.Cascader поддерживает встроенный поиск. Для настройки используется
свойство showSearch:
<Cascader
options={options}
showSearch={{ filter, render }}
placeholder="Поиск и выбор"
/>
Пример фильтрации:
const filter = (inputValue, path) =>
path.some(option => option.label.toLowerCase().includes(inputValue.toLowerCase()));
inputValue — текст, введённый пользователем.path — цепочка элементов, ведущих к текущему
объекту.true для тех путей, которые должны
отображаться в результатах поиска.Можно полностью изменить, как элементы будут отображаться:
const displayRender = labels => labels.join(' / ');
<Cascader options={options} displayRender={displayRender} placeholder="Кастомный вид" />
displayRender получает массив labels
выбранного пути и возвращает строку для отображения в инпуте.По умолчанию Cascader позволяет выбирать только конечные элементы. Для выбора любого уровня используется:
<Cascader options={options} changeOnSelect placeholder="Выберите любой уровень" />
changeOnSelect открывает возможность выбирать
родительские элементы без обязательного спуска к последнему уровню.Cascader полностью интегрируется с компонентом Form.Item:
import { Form, Cascader, Button } from 'antd';
<Form>
<Form.Item name="location" label="Регион" rules={[{ required: true, message: 'Выберите значение' }]}>
<Cascader options={options} placeholder="Выберите регион" />
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">Отправить</Button>
</Form.Item>
</Form>
rules обеспечивает валидацию выбора.name привязывает компонент к полю формы для отправки
данных.disabled — полностью блокирует компонент.allowClear — добавляет кнопку для очистки выбранного
значения.fieldNames — позволяет использовать нестандартные ключи
в массиве опций:<Cascader
options={options}
fieldNames={{ label: 'name', value: 'id', children: 'nodes' }}
/>
popupPlacement — управление позицией выпадающего списка
(bottomLeft, topLeft и др.).loadData и changeOnSelect.value, иначе
компонент может работать некорректно.showSearch.filter позволяет
полностью контролировать видимые результаты.Cascader — мощный инструмент для построения многоуровневых селектов с гибкой кастомизацией, поддержкой поиска и динамической загрузки данных, что делает его незаменимым в современных интерфейсах Ant Design.