SyntheticEvent
В этом справочном руководстве описана обёртка SyntheticEvent, которая является частью системы событий React. Смотрите руководство Обработка событий для детальной информации.
Обзор
Ваши обработчики событий получают экземпляр SyntheticEvent, это кроссбраузерная обёртка над нативным экземпляром события. У неё такой же интерфейс, как и у нативного события, включая методы stopPropagation() и preventDefault(). Эта обёртка помогает событиям работать одинаково во всех браузерах.
Если вам всё-таки нужно получить нативное браузерное событие, обратитесь к атрибуту nativeEvent. Синтетические события отличаются от нативных событий браузера и непосредственно не связаны с ними. Например, в синтетическом событии onMouseLeave атрибут event.nativeEvent будет указывать на mouseout. Эта деталь реализации не является частью публичного API, поэтому может измениться со временем. Вот перечень атрибутов объекта SyntheticEvent:
boolean bubbles
boolean cancelable
DOMEventTarget currentTarget
boolean defaultPrevented
number eventPhase
boolean isTrusted
DOMEvent nativeEvent
void preventDefault()
boolean isDefaultPrevented()
void stopPropagation()
boolean isPropagationStopped()
void persist()
DOMEventTarget target
number timeStamp
string typeПримечание:
Начиная с версии 0.14, возврат
falseиз обработчика событий больше не останавливает всплытие. Вместо этого нужно вручную вызыватьe.stopPropagation()илиe.preventDefault().
Пул событий
События SyntheticEvent содержатся в пуле. Это означает, что объект SyntheticEvent будет повторно использован, а все его свойства будут очищены после вызова обработчика события.
Это необходимо из соображений производительности.
Именно поэтому нельзя использовать синтетические события асинхронно.
function onClick(event) {
console.log(event); // => null-объект.
console.log(event.type); // => "click"
const eventType = event.type; // => "click"
setTimeout(function() {
console.log(event.type); // => null
console.log(eventType); // => "click"
}, 0);
// Не сработает, поскольку this.state.clickEvent будет содержать только null-значения.
this.setState({clickEvent: event});
// По-прежнему можно экспортировать свойства события.
this.setState({eventType: event.type});
}Примечание:
Если вы всё же хотите обратиться к полям события асинхронно, вам нужно вызвать
event.persist()на событии. Тогда оно будет извлечено из пула, что позволит вашему коду удерживать ссылки на это событие.
Поддерживаемые события
React нормализует события так, чтобы они содержали одинаковые свойства во всех браузерах.
Обработчики ниже вызываются на фазе всплытия (bubbling). А чтобы зарегистрировать событие на фазе перехвата (capture), просто добавьте Capture к имени события; например, вместо использования onClick используйте onClickCapture, чтобы обработать событие на фазе перехвата.
- События буфера обмена
- Композиционные события
- События клавиатуры
- События фокуса
- События формы
- Общие события
- События мыши
- События курсора
- События выбора
- Сенсорные события
- События UI
- События колёсика мыши
- События медиа-элементов
- События изображений
- События анимаций
- События переходов
- Другие события
Справочник
События буфера обмена
Названия событий:
onCopy onCut onPasteСвойства:
DOMDataTransfer clipboardDataКомпозиционные события
Названия событий:
onCompositionEnd onCompositionStart onCompositionUpdateСвойства:
string dataСобытия клавиатуры
Названия событий:
onKeyDown onKeyPress onKeyUpСвойства:
boolean altKey
number charCode
boolean ctrlKey
boolean getModifierState(key)
string key
number keyCode
string locale
number location
boolean metaKey
boolean repeat
boolean shiftKey
number whichСвойство key может содержать любое из документированных значений в спецификации событий DOM третьего уровня.
События фокуса
Названия событий:
onFocus onBlurЭти события фокуса работают не только на элементах формы, но и на всех остальных элементах в React DOM.
Свойства:
DOMEventTarget relatedTargetСобытия формы
Названия событий:
onChange onInput onInvalid onReset onSubmitБольше информации о событии onChange тут — Формы.
Общие события
Названия событий:
onError onLoadСобытия мыши
Названия событий:
onClick onContextMenu onDoubleClick onDrag onDragEnd onDragEnter onDragExit
onDragLeave onDragOver onDragStart onDrop onMouseDown onMouseEnter onMouseLeave
onMouseMove onMouseOut onMouseOver onMouseUpСобытия onMouseEnter и onMouseLeave всплывают с покинутого элемента к наведённому, вместо обычного процесса всплытия и не имеют фазы перехвата.
Свойства:
boolean altKey
number button
number buttons
number clientX
number clientY
boolean ctrlKey
boolean getModifierState(key)
boolean metaKey
number pageX
number pageY
DOMEventTarget relatedTarget
number screenX
number screenY
boolean shiftKeyСобытия курсора
Названия событий:
onPointerDown onPointerMove onPointerUp onPointerCancel onGotPointerCapture
onLostPointerCapture onPointerEnter onPointerLeave onPointerOver onPointerOutСобытия onPointerEnter и onPointerLeave всплывают с покинутого элемента к наведённому, вместо обычного процесса всплытия и не имеют фазы перехвата.
Свойства:
По определению из спецификации W3, события курсора наследуют события мыши со следующими свойствами:
number pointerId
number width
number height
number pressure
number tangentialPressure
number tiltX
number tiltY
number twist
string pointerType
boolean isPrimaryНа заметку по поводу кроссбраузерности:
События указателя ещё не поддерживаются во всех браузерах (на момент написания этой страницы есть поддержка в Chrome, Firefox, Edge и Internet Explorer). React сознательно не добавляет полифил для поддержки в других браузерах, потому что это значительно бы увеличило размер пакета react-dom.
Если вашему приложению нужны события указателя, мы рекомендуем использовать сторонний полифил.
События выбора
Названия событий:
onSelectСенсорные события
Названия событий:
onTouchCancel onTouchEnd onTouchMove onTouchStartСвойства:
boolean altKey
DOMTouchList changedTouches
boolean ctrlKey
boolean getModifierState(key)
boolean metaKey
boolean shiftKey
DOMTouchList targetTouches
DOMTouchList touchesСобытия UI
Названия событий:
onScrollСвойства:
number detail
DOMAbstractView viewСобытия колёсика мыши
Названия событий:
onWheelСвойства:
number deltaMode
number deltaX
number deltaY
number deltaZСобытия медиа-элементов
Названия событий:
onAbort onCanPlay onCanPlayThrough onDurationChange onEmptied onEncrypted
onEnded onError onLoadedData onLoadedMetadata onLoadStart onPause onPlay
onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend
onTimeUpdate onVolumeChange onWaitingСобытия изображений
Названия событий:
onLoad onErrorСобытия анимаций
Названия событий:
onAnimationStart onAnimationEnd onAnimationIterationСвойства:
string animationName
string pseudoElement
float elapsedTimeСобытия переходов
Названия событий:
onTransitionEndСвойства:
string propertyName
string pseudoElement
float elapsedTimeДругие события
Названия событий:
onToggle