В Preact обработка событий реализуется аналогично React, но с некоторыми особенностями, связанными с размером библиотеки и оптимизацией производительности. События в Preact привязываются через JSX-атрибуты, где имя события указывается в camelCase, а значение — функция-обработчик.
import { h } from 'preact';
function Button() {
function handleClick(event) {
console.log('Клик по кнопке', event);
}
return <button onCl ick={handleClick}>Нажми меня</button>;
}
onClick — стандартный обработчик клика.event — объект события, аналогичный нативному
MouseEvent, KeyboardEvent и другим.event в обработчиках является объектом Preact
Synthetic Event, который оборачивает нативное событие и
обеспечивает совместимость с разными браузерами.onClick,
onChange, onInput, onSubmit,
onKeyDown и др.Для передачи аргументов в обработчик используется функция-обёртка:
function ListItem({ item, onRemove }) {
return (
<li>
{item.name}
<button onCl ick={() => onRemove(item.id)}>Удалить</button>
</li>
);
}
onCl ick={onRemove(item.id)}, так
как это вызовет функцию сразу при рендере.События форм, такие как onInput и onChange,
имеют особенности:
function FormExample() {
const [value, setValue] = useState('');
function handleInput(event) {
setValue(event.target.value);
}
return <input type="text" value={value} onIn put={handleInput} />;
}
onInput срабатывает при каждом изменении текста,
onChange — при потере фокуса (поведение может отличаться от
браузера к браузеру).function KeyPressExample() {
function handleKeyDown(event) {
if (event.key === 'Enter') {
console.log('Нажата клавиша Enter');
}
}
return <input type="text" onKeyD own={handleKeyDown} />;
}
onKeyDown,
onKeyUp, onKeyPress) используют объект
события, который содержит свойства key, code,
ctrlKey, shiftKey и другие.event.preventDefault(), для остановки всплытия —
event.stopPropagation().function MouseExample() {
function handleMouseOver(event) {
console.log('Наведение мыши на элемент');
}
return <div onMouseO ver={handleMouseOver}>Наведи курсор</div>;
}
onClick,
onDoubleClick, onMouseDown,
onMouseUp, onMouseMove,
onMouseEnter, onMouseLeave.PointerEvent) позволяют работать с
сенсорными экранами и стилусами.Обработчики можно хранить отдельно для повторного использования:
function logEvent(event) {
console.log(event.type, event.target);
}
function Component() {
return (
<div onCl ick={logEvent} onMouseO ver={logEvent}>
Действия с мышью
</div>
);
}
Для компонентов, реализующих собственную логику взаимодействия, можно
комбинировать обработчики событий с useState и
useEffect:
function ToggleButton() {
const [active, setActive] = useState(false);
function handleClick() {
setActive(!active);
}
return <button onCl ick={handleClick}>{active ? 'Вкл' : 'Выкл'}</button>;
}
useEffect для
побочных эффектов после срабатывания событий.CustomEvent и слушаться с помощью
onEventName.function Child() {
function sendEvent() {
const event = new CustomEvent('myEvent', { detail: { value: 42 } });
window.dispatchEvent(event);
}
return <button onCl ick={sendEvent}>Отправить событие</button>;
}
window.addEventListener('myEvent', (e) => {
console.log('Получено событие', e.detail.value);
});
Обработчики событий в Preact обеспечивают гибкий и производительный способ реагирования на действия пользователя, сочетая синтаксис JSX с делегированием и объектами Synthetic Event. Такой подход делает интерфейсы интерактивными, поддерживаемыми и легко расширяемыми.