React Aria — это библиотека для работы с доступностью (accessibility, a11y) в приложениях на React. Она предоставляет низкоуровневые хуки и утилиты, позволяющие создавать интерфейсы, соответствующие стандартам WCAG и ARIA, без необходимости вручную управлять атрибутами и событиями доступности.
Главная идея React Aria заключается в разделении логики доступности и визуальной реализации компонентов. Это обеспечивает гибкость при разработке пользовательских интерфейсов, где визуальная часть и поведение могут быть полностью кастомизированы.
React Aria предоставляет множество хуков, каждый из которых решает отдельную задачу по доступности.
Хук useButton позволяет сделать элемент интерактивным и
управляемым с клавиатуры, поддерживая состояния pressed,
disabled и корректное поведение с onClick.
Пример использования:
import {useButton} from '@react-aria/button';
import {useRef} from 'react';
function Button(props) {
let ref = useRef();
let {buttonProps} = useButton(props, ref);
return ;
}
Ключевые моменты:
aria-disabled.).useCheckbox управляет состоянием и доступностью флажков.
Он возвращает свойства для передачи элементу, включая
checked, disabled, onChange.
Особенности:
checked,
unchecked, mixed).Пример:
import {useCheckbox} from '@react-aria/checkbox';
import {useRef} from 'react';
function Checkbox({isSelected, onChange, children}) {
let ref = useRef();
let {inputProps} = useCheckbox({isSelected, onChange}, ref);
return (
);
}
Хук useFocus отслеживает состояние фокуса элемента.
Возвращает объект focusProps для передачи в компонент.
Возможности:
isFocused).Используется для управления всплывающими элементами (модальные окна, меню, тултипы). Особенности:
import {useOverlay} from '@react-aria/overlays';
import {useRef} from 'react';
function Modal({isOpen, onClose, children}) {
let ref = useRef();
let {overlayProps} = useOverlay({isOpen, onClose}, ref);
if (!isOpen) return null;
return (
{children}
);
}
React Aria предоставляет утилиты для комплексного управления фокусом и навигацией с клавиатуры.
useFocusRing позволяет стилизовать элементы при фокусе
с клавиатуры.useKeyboard добавляет обработку событий клавиатуры на
уровне компонента.useMenu,
useTabList, useListBox) обеспечивают
правильное ARIA-поведение.React Aria интегрируется с React Stately для управления состоянием компонентов и поддерживает локализацию. Хуки позволяют автоматически адаптировать форматы дат, чисел и текстов в интерфейсе.
Пример:
import {useLocale} from '@react-aria/i18n';
function Greeting() {
let {locale} = useLocale();
return {`Текущий язык интерфейса: ${locale}`}
;
}
div, span,
button).import {useButton} from '@react-aria/button';
import {useFocusRing} from '@react-aria/focus';
import {useRef} from 'react';
function AccessibleButton({children, onPress}) {
let ref = useRef();
let {buttonProps} = useButton({onPress}, ref);
let {focusProps, isFocusVisible} = useFocusRing();
return (
);
}
Этот подход позволяет создавать кнопки с корректной доступностью, визуальной индикацией фокуса и управлением с клавиатуры без ручной настройки атрибутов.
React Aria легко интегрируется с любыми CSS- и UI-библиотеками, такими как Tailwind, Material UI, Chakra UI, поскольку фокус делается на логике, а не на стилях. Компоненты остаются полностью кастомизируемыми и совместимыми с существующим дизайном.