В библиотеке React Aria логирование событий является важным инструментом для отслеживания взаимодействия пользователей с компонентами и для отладки интерфейса. React Aria не предоставляет встроенной системы логирования, но она позволяет интегрировать обработчики событий и использовать стандартные методы JavaScript для регистрации действий.
События React и Aria React Aria расширяет стандартные события React, добавляя ARIA-семантику и управление доступностью. При логировании важно различать:
onClick, onFocus, onBlur.onOpenChange для Menu или
Popover.Использование обработчиков событий Для логирования достаточно добавить обработчик события к компоненту, используя стандартный синтаксис React:
import {useButton} from '@react-aria/button';
import {useRef} from 'react';
function LogButton() {
const ref = useRef();
const {buttonProps} = useButton({
onPress: () => console.log('Кнопка нажата')
}, ref);
return <button {...buttonProps} ref={ref}>Нажми меня</button>;
}
В этом примере событие нажатия кнопки выводится в консоль.
Ключевой момент — использование пропсов
buttonProps, возвращаемых хуком useButton, для
корректной работы ARIA и правильного логирования.
React Aria предоставляет хуки для управления состоянием компонентов,
что позволяет логировать изменения состояния. Пример для компонента
переключателя (Switch):
import {useSwitch} from '@react-aria/switch';
import {useToggleState} from '@react-stately/toggle';
import {useRef} from 'react';
function LogSwitch() {
const state = useToggleState();
const ref = useRef();
const {inputProps} = useSwitch(state, ref);
const handleChange = (e) => {
console.log(`Переключатель изменён: ${e.target.checked}`);
}
return <input {...inputProps} ref={ref} onCha nge={handleChange} />;
}
Здесь используется комбинация useToggleState и
useSwitch для управления состоянием и логирования
изменений. Важно соблюдать порядок: сначала обрабатываем состояние через
React Aria, затем добавляем собственный обработчик для логирования.
Для проектов с аналитикой или централизованным логированием можно
использовать внешние библиотеки, например loglevel,
Sentry или собственные API. Пример с использованием
loglevel:
import log from 'loglevel';
import {useButton} from '@react-aria/button';
import {useRef} from 'react';
function AnalyticsButton() {
const ref = useRef();
const {buttonProps} = useButton({
onPress: () => log.info('Кнопка нажата', {component: 'AnalyticsButton'})
}, ref);
return <button {...buttonProps} ref={ref}>Отправить</button>;
}
Такой подход позволяет не только выводить события в консоль, но и передавать данные в централизованную систему для аналитики или мониторинга.
Для компонентов с множественными состояниями, например
Menu или TabList, логирование требует
отслеживания каждого события состояния:
import {useMenuTrigger} from '@react-aria/menu';
import {useMenuTriggerState} from '@react-stately/menu';
import {useRef} from 'react';
function LogMenu() {
const state = useMenuTriggerState();
const ref = useRef();
const {menuTriggerProps, menuProps} = useMenuTrigger({}, state, ref);
const handleOpenChange = (isOpen) => {
console.log(`Меню ${isOpen ? 'открыто' : 'закрыто'}`);
}
state.open = handleOpenChange; // перехватываем изменение состояния
return (
<div>
<button {...menuTriggerProps} ref={ref}>Меню</button>
{state.isOpen && <ul {...menuProps}><li>Элемент 1</li><li>Элемент 2</li></ul>}
</div>
);
}
Здесь для отслеживания состояния меню используется
useMenuTriggerState, а для логирования открытий и закрытий
— отдельный обработчик. Важно корректно связывать состояния с
событиями, чтобы логирование отражало актуальное состояние
компонента.
console.log, но для
продакшн-аналитики использовать специальные библиотеки или API.Логирование в React Aria — это комбинация стандартного подхода React, работы с хуками состояния и возможностей ARIA. Правильная интеграция событий и состояний позволяет создавать доступные, интерактивные и полностью отслеживаемые интерфейсы.