Хук usePress из библиотеки React Aria предназначен для обработки взаимодействий пользователя с элементами интерфейса, которые можно «нажимать». В отличие от стандартных обработчиков клика в React, usePress обеспечивает унифицированное поведение для различных типов устройств — мышь, сенсорный экран и клавиатура, включая поддержку вспомогательных технологий.
Хук возвращает объект с набором свойств и функций, которые нужно применять к элементу через спред-оператор:
let { pressProps, isPressed } = usePress(props);
Хук принимает объект настроек props, включающий ключевые параметры:
onPress.Пример использования с простым элементом кнопки:
import { usePress } from '@react-aria/interactions';
import { useRef } from 'react';
function PressableButton({ onPress, children }) {
let ref = useRef();
let { pressProps, isPressed } = usePress({ onPress, ref });
return (
<button
{...pressProps}
ref={ref}
style={{
background: isPressed ? 'lightgray' : 'white',
border: '1px solid black',
padding: '8px 16px',
}}
>
{children}
</button>
);
}
usePress автоматически обрабатывает:
Enter и
Space для элементов, которые можно активировать.Это позволяет создавать доступные интерфейсы без дополнительной логики для каждого типа ввода.
Переменная isPressed используется для визуального отображения состояния кнопки или любого другого интерактивного элемента. Например:
<div
{...pressProps}
ref={ref}
style={{
background: isPressed ? '#e0e0e0' : '#ffffff',
transition: 'background 0.2s',
cursor: 'pointer',
}}
>
Нажми меня
</div>
При удержании элемента цвет меняется, а при отпускании возвращается к исходному. Такой подход позволяет создавать эффект тактильной обратной связи, важный для сенсорных интерфейсов.
click не подходит
из-за кастомной логики.onLongPress).Пример с длительным нажатием:
let { pressProps, isPressed } = usePress({
onPress: () => console.log('Короткое нажатие'),
onLongPress: () => console.log('Длительное нажатие'),
delayLongPress: 500
});
usePress часто комбинируется с:
Совместное использование этих хуков позволяет создавать универсальные интерактивные компоненты, которые корректно работают во всех средах и с любыми способами ввода.
ref для элемента, к которому
применяются обработчики pressProps.onClick и onPress, чтобы избежать двойного
срабатывания.isPressed для улучшения пользовательского опыта.isDisabled для блокировки интерактивного
элемента без удаления его из DOM, сохраняя доступность.usePress обеспечивает консистентное и доступное управление нажатиями на элементы, делая интерфейс отзывчивым и предсказуемым на всех устройствах.