В библиотеке React Aria сигнатуры функций играют ключевую роль, так как они определяют способ взаимодействия компонентов с системой управления доступностью (ARIA), состоянием и событиями. Правильное понимание этих сигнатур позволяет создавать полностью доступные интерфейсы без дублирования логики.
props, который содержит все свойства компонента, включая
пользовательские и системные.state) из React Stately,
которые используются вместе с React Aria для синхронизации состояния и
UI.Пример базовой сигнатуры функции:
function useButton(props, state, ref) {
// props – свойства кнопки
// state – состояние из React Stately
// ref – ссылка на DOM-элемент
return {
buttonProps: {
...props,
onClick: handleClick,
'aria-label': props['aria-label']
}
};
}
useButtonСигнатура:
function useButton(
props: AriaButtonProps,
ref: RefObject<HTMLElement>
): { buttonProps: HTMLAttributes<HTMLElement> }
onPress, isDisabled,
aria-label.buttonProps, который нужно применять к элементу
<button>.Особенности:
onClick,
onPress.aria-disabled,
aria-pressed).focusVisible для подсветки фокуса
клавиатуры.useCheckboxСигнатура:
function useCheckbox(
props: AriaCheckboxProps,
state: CheckboxState,
ref: RefObject<HTMLInputElement>
): { inputProps: InputHTMLAttributes<HTMLInputElement> }
isSelected,
onChange, isDisabled).checked или indeterminate) и методы для
изменения.<input type="checkbox">.inputProps для
применения к элементу.Особенности:
checked через объект
state.aria-checked с учетом частичных состояний
(mixed).onKeyDown.useMenu и
useMenuItemuseMenu:
function useMenu(
props: AriaMenuProps,
state: MenuState,
ref: RefObject<HTMLElement>
): { menuProps: HTMLAttributes<HTMLElement> }
useMenuItem:
function useMenuItem(
props: AriaMenuItemProps,
state: MenuState,
ref: RefObject<HTMLElement>
): { menuItemProps: HTMLAttributes<HTMLElement> }
key, isDisabled, onAction).Особенности:
useMenu управляет навигацией по элементам с
клавиатуры.useMenuItem автоматически добавляет атрибуты
role="menuitem" и aria-disabled.useMenuSection.Все функции React Aria следуют единому паттерну:
useX(props, state?, ref?) => {
...propsForDOM
}
props — обязательный объект с параметрами
компонента.state — опциональный объект состояния, если компонент
управляет выбором или переключением.ref — опциональная ссылка на DOM-элемент для корректной
работы фокуса и событий.props и методов для
привязки к DOM.useButton +
useFocusRing, чтобы добавить визуальный фокус.ref в
возвращаемые функции для корректного управления фокусом и клавиатурной
навигацией.import { useButton } from '@react-aria/button';
import { useFocusRing } from '@react-aria/focus';
function AccessibleButton(props) {
const ref = useRef(null);
const { buttonProps } = useButton(props, ref);
const { focusProps, isFocusVisible } = useFocusRing();
return (
<button
{...buttonProps}
{...focusProps}
ref={ref}
style={{
outline: isFocusVisible ? '2px solid blue' : 'none'
}}
>
{props.children}
</button>
);
}
useButton обеспечивает корректное
управление событиями.useFocusRing добавляет визуальную подсветку
фокуса.Сигнатуры функций в React Aria стандартизируют работу с компонентами, упрощают управление состоянием и обеспечивают полную совместимость с ARIA. Их понимание — ключевой аспект при создании доступных и гибких интерфейсов.