Компонент Collapse в библиотеке Ant Design предназначен для создания сворачиваемых панелей. Он позволяет организовать контент так, чтобы пользователь мог раскрывать и скрывать отдельные блоки информации, улучшая визуальное восприятие страницы и экономя пространство интерфейса.
Импорт компонента осуществляется из пакета antd:
import { Collapse } from 'antd';
const { Panel } = Collapse;
Базовый пример:
<Collapse>
<Panel header="Заголовок панели 1" key="1">
<p>Содержимое панели 1</p>
</Panel>
<Panel header="Заголовок панели 2" key="2">
<p>Содержимое панели 2</p>
</Panel>
<Panel header="Заголовок панели 3" key="3">
<p>Содержимое панели 3</p>
</Panel>
</Collapse>
Ключевые моменты:
header — заголовок панели, отображаемый всегда.key — уникальный идентификатор панели, необходим для
управления состоянием раскрытия.Panel помещается любой React-контент.По умолчанию Collapse поддерживает автоматическое управление
состоянием панелей. Можно использовать активный ключ
(activeKey) для контролируемого поведения:
<Collapse activeKey={['1']}>
<Panel header="Панель 1" key="1">
<p>Контент 1</p>
</Panel>
<Panel header="Панель 2" key="2">
<p>Контент 2</p>
</Panel>
</Collapse>
Особенности:
activeKey может быть строкой или массивом строк.accordion:<Collapse accordion>
<Panel header="Панель 1" key="1">
<p>Контент 1</p>
</Panel>
<Panel header="Панель 2" key="2">
<p>Контент 2</p>
</Panel>
</Collapse>
При accordion одновременно может быть открыта только
одна панель.
| Свойство | Тип | Описание |
|---|---|---|
accordion |
boolean | Режим аккордеона, только одна открытая панель |
activeKey |
string | string[] |
defaultActiveKey |
string | string[] |
bordered |
boolean | Отображение границ панелей |
destroyInactivePanel |
boolean | Удаление содержимого закрытых панелей из DOM |
expandIcon |
function | Кастомная иконка раскрытия панели |
Изменение иконки раскрытия:
<Collapse
expandIcon={({ isActive }) => <span>{isActive ? '-' : '+'}</span>}
>
<Panel header="Панель с кастомной иконкой" key="1">
<p>Содержимое панели</p>
</Panel>
</Collapse>
Удаление границ:
<Collapse bordered={false}>
<Panel header="Панель без границ" key="1">
<p>Контент</p>
</Panel>
</Collapse>
Удаление контента закрытой панели из DOM:
<Collapse destroyInactivePanel>
<Panel header="Динамическая панель" key="1">
<p>Содержимое загружается только при раскрытии</p>
</Panel>
</Collapse>
Collapse поддерживает вложенные панели, что позволяет создавать сложные иерархии контента:
<Collapse>
<Panel header="Внешняя панель" key="1">
<Collapse>
<Panel header="Внутренняя панель 1" key="1-1">
<p>Контент внутренней панели 1</p>
</Panel>
<Panel header="Внутренняя панель 2" key="1-2">
<p>Контент внутренней панели 2</p>
</Panel>
</Collapse>
</Panel>
</Collapse>
onChange — вызывается при раскрытии или закрытии
панели, получает массив активных ключей:<Collapse onCha nge={(keys) => console.log('Активные панели:', keys)}>
<Panel header="Панель 1" key="1">
<p>Контент</p>
</Panel>
</Collapse>
accordion для FAQ или
списков, где важно показывать только один раздел за раз.destroyInactivePanel при
больших объемах данных для оптимизации производительности.import React, { useState } from 'react';
import { Collapse, Button } from 'antd';
const { Panel } = Collapse;
const ControlledCollapse = () => {
const [activeKeys, setActiveKeys] = useState(['1']);
const togglePanel = (key) => {
setActiveKeys((prev) =>
prev.includes(key) ? prev.filter((k) => k !== key) : [...prev, key]
);
};
return (
<>
<Button onCl ick={() => togglePanel('1')}>Переключить панель 1</Button>
<Collapse activeKey={activeKeys} onCha nge={setActiveKeys}>
<Panel header="Панель 1" key="1">
<p>Контент панели 1</p>
</Panel>
<Panel header="Панель 2" key="2">
<p>Контент панели 2</p>
</Panel>
</Collapse>
</>
);
};
export default ControlledCollapse;
Такой подход обеспечивает полный контроль над состоянием, интеграцию с кнопками и динамическую логику открытия/закрытия панелей.