DismissButton — это специализированный компонент из библиотеки React Aria, предназначенный для обеспечения доступности интерактивных элементов, которые можно закрыть или скрыть. Он особенно актуален для модальных окон, уведомлений, всплывающих панелей и других компонентов интерфейса, где важно обеспечить корректное взаимодействие для пользователей со скринридерами.
Компонент DismissButton не отображается визуально в интерфейсе. Его основная задача — предоставить пользователю возможность закрыть текущий контекст с помощью клавиатуры и вспомогательных технологий.
Ключевые принципы:
onClose).Импорт компонента производится из
@react-aria/overlays:
import { DismissButton } from '@react-aria/overlays';
Простейший пример интеграции в модальный компонент:
function Modal({ isOpen, onClose, children }) {
if (!isOpen) return null;
return (
<div role="dialog" aria-modal="true" className="modal">
<DismissButton onDism iss={onClose} />
{children}
<DismissButton onDism iss={onClose} />
</div>
);
}
Здесь DismissButton размещён в начале и конце модального окна, что обеспечивает:
DismissButton поддерживает несколько ключевых свойств:
| Свойство | Тип | Описание |
|---|---|---|
onDismiss |
(event: Event) => void |
Функция, вызываемая при попытке закрытия компонента. |
children |
ReactNode |
Опционально, редко используется, так как элемент обычно невидим. |
ref |
RefObject<HTMLElement> |
Позволяет управлять фокусом или ссылаться на DOM-элемент. |
Основное свойство — onDismiss. Его реализация должна обеспечивать корректное обновление состояния родительского компонента, например, скрытие модального окна или панели уведомлений.
DismissButton предназначен для улучшения доступности:
role="dialog" и другими семантическими
контейнерами, где нужно управлять фокусом.Важно помнить: даже если элемент невидим, он должен быть логически присутствующим в DOM, чтобы вспомогательные технологии могли с ним взаимодействовать.
onDismiss, который
корректно обновляет состояние компонента.import { Overlay, DismissButton } from '@react-aria/overlays';
function Tooltip({ isOpen, onClose, children }) {
return (
<Overlay>
{isOpen && (
<div role="tooltip" className="tooltip">
<DismissButton onDism iss={onClose} />
{children}
<DismissButton onDism iss={onClose} />
</div>
)}
</Overlay>
);
}
Такое использование обеспечивает:
DismissButton — инструмент обеспечения доступности и предсказуемости пользовательского интерфейса для людей с ограниченными возможностями. Он позволяет:
Использование DismissButton является лучшей практикой для модальных окон, уведомлений и всплывающих компонентов, когда важно обеспечить полную доступность интерфейса.