Компонент Drawer в библиотеке Ant Design представляет собой панель, выезжающую с любой стороны экрана и предназначенную для отображения дополнительного содержимого, не перекрывающего полностью основной интерфейс. Drawer особенно полезен для боковых меню, форм ввода и панелей с фильтрами.
Для использования Drawer необходимо импортировать его из пакета
antd:
import { Drawer, Button } from 'antd';
import { useState } from 'react';
Базовая структура Drawer включает три ключевых момента:
useState.openDrawer и closeDrawer.<Drawer>.Пример базового использования:
const App = () => {
const [visible, setVisible] = useState(false);
const showDrawer = () => setVisible(true);
const onCl ose = () => setVisible(false);
return (
<>
<Button type="primary" onCl ick={showDrawer}>
Открыть панель
</Button>
<Drawer
title="Пример панели"
placement="right"
onCl ose={onClose}
open={visible}
>
<p>Содержимое панели</p>
<p>Дополнительные элементы</p>
</Drawer>
</>
);
};
1. title – задаёт заголовок панели.
Может быть строкой или JSX.
2. placement – определяет сторону, с
которой выезжает панель:
"left" – слева"right" – справа"top" – сверху"bottom" – снизу3. onClose – функция, вызываемая при
закрытии панели.
4. open (ранее visible) –
управляет состоянием отображения Drawer.
5. width и height – задают
размеры панели, ширину для боковых и высоту для верхней/нижней
панелей.
6. closable – позволяет скрыть крестик
закрытия (по умолчанию true).
7. destroyOnClose – если
true, содержимое будет удаляться из DOM при закрытии, что
полезно для форм с большим количеством данных.
Drawer поддерживает любой JSX-контент, включая формы, списки и таблицы. Пример с формой:
import { Form, Input, Button } from 'antd';
<Drawer
title="Форма пользователя"
placement="right"
onCl ose={onClose}
open={visible}
destroyOnClose
>
<Form layout="vertical">
<Form.Item label="Имя">
<Input placeholder="Введите имя" />
</Form.Item>
<Form.Item label="Email">
<Input placeholder="Введите email" />
</Form.Item>
<Button type="primary" htmlType="submit">
Сохранить
</Button>
</Form>
</Drawer>
Можно одновременно использовать несколько Drawer с разными состояниями:
const [firstVisible, setFirstVisible] = useState(false);
const [secondVisible, setSecondVisible] = useState(false);
<Drawer
title="Первая панель"
placement="left"
onCl ose={() => setFirstVisible(false)}
open={firstVisible}
>
Контент первой панели
</Drawer>
<Drawer
title="Вторая панель"
placement="right"
onCl ose={() => setSecondVisible(false)}
open={secondVisible}
>
Контент второй панели
</Drawer>
mask – определяет, есть ли затемнённый
фон (по умолчанию true).maskClosable – если true,
клик по маске закрывает панель.keyboard – возможность закрытия панели
клавишей Esc (по умолчанию true).drawerStyle – кастомизация стилей
панели.Пример кастомного стиля:
<Drawer
title="Стилизация"
placement="right"
onCl ose={onClose}
open={visible}
drawerStyle={{ backgroundColor: '#f0f2f5', padding: '24px' }}
>
Контент с кастомными стилями
</Drawer>
Drawer поддерживает вложенность: внутри панели можно открыть ещё одну. При этом внешний Drawer автоматически остаётся активным, но внутренний получает фокус.
<Drawer
title="Внешняя панель"
placement="right"
onCl ose={() => setOuter(false)}
open={outer}
>
<Button onCl ick={() => setInner(true)}>Открыть внутреннюю</Button>
<Drawer
title="Внутренняя панель"
placement="right"
onCl ose={() => setInner(false)}
open={inner}
>
Содержимое внутренней панели
</Drawer>
</Drawer>
destroyOnClose, чтобы избегать утечек состояния.drawerStyle вместо
глобального CSS, чтобы не нарушать тему Ant Design.maskClosable={false} повышает точность
взаимодействия с панелью, особенно при сложных формах или таблицах.Drawer является мощным инструментом для организации дополнительного контента, позволяя создавать интерфейсы с множеством выезжающих панелей и интерактивных элементов, оставаясь при этом полностью интегрированным с системой стилей Ant Design.