Обработка событий
В документации React по обработке событий показано, как добавить обработчик события к элементу React. Для типизации этих обработчиков событий можно использовать типы SyntheticEvent<T>, например:
import {useState} from 'react';
import * as React from 'react';
component MyComponent() {
const [state, setState] = useState({count: 0});
const handleClick = (event: SyntheticEvent<HTMLButtonElement>) => {
// To access your button instance use `event.currentTarget`.
event.currentTarget as HTMLButtonElement;
setState(prevState => ({
count: prevState.count + 1,
}));
};
return (
<div>
<p>Count: {state.count}</p>
<button onClick={handleClick}>Increment</button>
</div>
);
} Существуют также более специализированные типы синтетических событий, например SyntheticKeyboardEvent<T>, SyntheticMouseEvent<T> или SyntheticTouchEvent<T>. Типы SyntheticEvent<T> обычно принимают один аргумент типа: тип HTML-элемента, для которого был задан обработчик события.
Если вы не хотите указывать тип экземпляра элемента, можно также использовать SyntheticEvent без аргументов типа, например: SyntheticEvent<>.
Примечание: Чтобы получить экземпляр элемента, например
HTMLButtonElementв примере выше, часто ошибочно используютevent.targetвместоevent.currentTarget.event.currentTargetследует использовать потому, чтоevent.targetможет ссылаться не на тот элемент из-за всплытия событий.
Примечание: React использует собственную систему событий, поэтому важно использовать типы
SyntheticEventвместо типов DOM, таких какEvent,KeyboardEventиMouseEvent.
Типы SyntheticEvent<T>, предоставляемые React, и соответствующие им события DOM:
-
SyntheticEvent<T>для Event -
SyntheticAnimationEvent<T>для AnimationEvent -
SyntheticCompositionEvent<T>для CompositionEvent -
SyntheticInputEvent<T>для InputEvent -
SyntheticUIEvent<T>для UIEvent -
SyntheticFocusEvent<T>для FocusEvent -
SyntheticKeyboardEvent<T>для KeyboardEvent -
SyntheticMouseEvent<T>для MouseEvent -
SyntheticPointerEvent<T>для PointerEvent -
SyntheticDragEvent<T>для DragEvent -
SyntheticWheelEvent<T>для WheelEvent -
SyntheticTouchEvent<T>для TouchEvent -
SyntheticClipboardEvent<T>для ClipboardEvent -
SyntheticTransitionEvent<T>для TransitionEvent
См. также
© 2013–present Facebook Inc.
Licensed under the MIT License.
https://flow.org/en/docs/react/events