Preact предоставляет эффективный и лёгкий способ обработки событий в компонентах, сохраняя синтаксис, близкий к React. Управление событиями включает привязку функций-обработчиков к элементам и правильную работу с объектами событий.
События мыши включают клики, наведение, отпускание кнопки и движение мыши. В Preact их обработка аналогична стандартным DOM-событиям, но с учётом синтетической оболочки Preact.
Основные события мыши:
onClick — щелчок мыши.onDoubleClick — двойной щелчок.onMouseDown / onMouseUp — нажатие и
отпускание кнопки.onMouseEnter / onMouseLeave — наведение и
уход с элемента.onMouseMove — движение курсора по элементу.Пример:
import { h } from 'preact';
import { useState } from 'preact/hooks';
function MouseTracker() {
const [coords, setCoords] = useState({ x: 0, y: 0 });
const handleMouseMove = (event) => {
setCoords({ x: event.clientX, y: event.clientY });
};
return (
<div
style={{ width: '300px', height: '300px', border: '1px solid black' }}
onMouseM ove={handleMouseMove}
>
Координаты: {coords.x}, {coords.y}
</div>
);
}
Особенности:
event в Preact — это синтетический объект, совместимый
с оригинальным DOM-событием.event.stopPropagation() и предотвращать стандартное
действие event.preventDefault().События клавиатуры позволяют отслеживать нажатия клавиш, сочетания и ввод текста. Основные события:
onKeyDown — срабатывает при нажатии клавиши.onKeyUp — при отпускании клавиши.onKeyPress — устаревшее событие, используемое для
символов (лучше использовать onKeyDown).Пример использования:
import { h } from 'preact';
import { useState } from 'preact/hooks';
function KeyLogger() {
const [lastKey, setLastKey] = useState('');
const handleKeyDown = (event) => {
setLastKey(event.key);
};
return (
<input
type="text"
placeholder="Нажмите клавишу"
onKeyD own={handleKeyDown}
/>
<p>Последняя нажатая клавиша: {lastKey}</p>
);
}
Ключевые моменты:
event.key — возвращает символ нажатой клавиши
(например, 'a').event.code — возвращает физическую клавишу
('KeyA').event.altKey, event.ctrlKey,
event.shiftKey, event.metaKey.В Preact часто требуется обрабатывать события мыши и клавиатуры одновременно, например, при реализации интерактивных элементов. Возможна привязка нескольких обработчиков к одному элементу.
Пример: условное срабатывание клика по клавише Ctrl
function CtrlClickButton() {
const handleClick = (event) => {
if (event.ctrlKey) {
alert('Ctrl + клик сработал!');
}
};
return <button onCl ick={handleClick}>Нажмите с Ctrl</button>;
}
Для передачи параметров в обработчик событий используется замыкание или функция-обёртка.
Пример:
function ListItem({ id, onSelect }) {
return (
<li onCl ick={() => onSelect(id)}>
Элемент {id}
</li>
);
}
function App() {
const handleSelect = (id) => {
console.log('Выбран элемент', id);
};
return (
<ul>
<ListItem id={1} onSELECT={handleSelect} />
<ListItem id={2} onSELECT={handleSelect} />
</ul>
);
}
useEffect:import { useEffect } from 'preact/hooks';
useEffect(() => {
const handleKeyDown = (event) => console.log(event.key);
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, []);
useState и useEffect.onClick с низкоуровневыми
DOM-обработчиками без явной необходимости.input, textarea) для предотвращения
неожиданных действий.event.repeat позволяет улучшить UX при длительном удержании
клавиш.Соблюдение этих подходов обеспечивает чистый, масштабируемый код с удобной обработкой всех событий клавиатуры и мыши в Preact.