Общие компоненты¶
Все встроенные компоненты браузера, такие как <div>
, поддерживают некоторые общие пропсы и события.
Описание¶
Общий компонент¶
1 |
|
Свойства
Эти специальные пропсы React поддерживаются для всех встроенных компонентов:
children
: Узел React (элемент, строка, число, портал, пустой узел типаnull
,undefined
и booleans, или массив других узлов React). Определяет содержимое внутри компонента. Когда вы используете JSX, вы обычно неявно указываете пропсchildren
путем вложения тегов типа<div><span /></div>
.dangerouslySetInnerHTML
: Объект вида{ __html: '<p>some html</p>' }
с необработанной HTML-строкой внутри. Переопределяет свойствоinnerHTML
узла DOM и отображает переданный HTML внутри. Это следует использовать с особой осторожностью! Если HTML внутри не является доверенным (например, если он основан на данных пользователя), вы рискуете получить XSS уязвимость.ref
: Объект ссылки изuseRef
илиcreateRef
, или функция обратного вызоваref
, или строка для legacy refs. Ваш ref будет заполнен элементом DOM для этого узла.suppressContentEditableWarning
: Булево значение. Еслиtrue
, подавляет предупреждение, которое React показывает для элементов, имеющих одновременноchildren
иcontentEditable={true}
(которые обычно не работают вместе). Используйте это, если вы создаете библиотеку ввода текста, которая управляет содержимымcontentEditable
вручную.suppressHydrationWarning
: Булево значение. Если вы используете серверный рендеринг,, обычно появляется предупреждение, когда сервер и клиент рендерят разное содержимое. В некоторых редких случаях (например, временные метки) очень трудно или невозможно гарантировать точное совпадение. Если вы установитеuppressHydrationWarning
вtrue
, React не будет предупреждать вас о несоответствии атрибутов и содержимого этого элемента. Эта функция работает только на одном уровне и предназначена для использования в качестве аварийного люка. Не злоупотребляйте им. Читайте о подавлении ошибок гидратации.style
: Объект со стилями CSS, например{ fontWeight: 'bold', margin: 20 }
. Аналогично свойству DOMstyle
, имена свойств CSS должны быть написаны вcamelCase
, напримерfontWeight
вместоfont-weight
. В качестве значений можно передавать строки или числа. Если вы передаете число, напримерwidth: 100
, React автоматически добавитpx
("пиксели") к значению, если только это не свойство без единиц измерения. Мы рекомендуем использоватьstyle
только для динамических стилей, значения которых заранее не известны. В других случаях применение простых CSS-классов сclassName
более эффективно.
Эти стандартные пропсы DOM также поддерживаются для всех встроенных компонентов:
accessKey
: Строка. Указывает комбинацию клавиш для элемента. Обычно не рекомендуется.aria-*
: Атрибуты ARIA позволяют указать информацию дерева доступности для этого элемента. Полное руководство см. в Атрибуты ARIA. В React все имена атрибутов ARIA точно такие же, как и в HTML.autoCapitalize
: Строка. Определяет, должен ли пользовательский ввод набираться заглавными буквами и каким образом.className
: Строка. Указывает имя CSS-класса элемента.contentEditable
: Булево значение. Еслиtrue
, браузер позволяет пользователю редактировать отображаемый элемент напрямую. Это используется для реализации библиотек богатого текстового ввода, таких как Lexical. React предупреждает, если вы пытаетесь передать дочерние элементы React элементу сcontentEditable={true}
, потому что React не сможет обновить его содержимое после редактирования пользователем.data-*
: Атрибуты Data позволяют прикрепить к элементу строковые данные, например,data-fruit="banana"
. В React они не часто используются, потому что обычно вместо этого вы считываете данные изprops
илиstate
.dir
: Либо'ltr'
, либо'rtl'
. Указывает направление текста элемента.draggable
: Булево значение. Определяет, является ли элемент перетаскиваемым. Часть HTML Drag and Drop API.enterKeyHint
: Строка. Определяет, какое действие должно быть представлено для клавиши Enter на виртуальных клавиатурах.htmlFor
: Строка. Дляlabel
иoutput
позволяет связать метку с некоторым элементом управления. Аналогичноfor
HTML-атрибуту. React использует стандартные имена свойств DOM (htmlFor
) вместо имен HTML-атрибутов.hidden
: Булево значение или строка. Указывает, должен ли элемент быть скрытым.id
: Строка. Задает уникальный идентификатор для этого элемента, который может быть использован для его последующего поиска или связи с другими элементами. Генерируйте его вместе сuseId
, чтобы избежать столкновений между несколькими экземплярами одного и того же компонента.is
: Строка. Если указана, компонент будет вести себя как пользовательский элементinputMode
: Строка. Определяет, какой тип клавиатуры отображать (например, текстовый, цифровой или телефонный).itemProp
: Строка. Указывает, какое свойство представляет элемент для краулеров структурированных данных.lang
: Строка. Указывает язык элемента.onAnimationEnd
: Функция обработчикаAnimationEvent
. Срабатывает при завершении CSS-анимации.onAnimationEndCapture
: ВерсияonAnimationEnd
, которая срабатывает в фазе захватаonAnimationIteration
: Функция обработчикаAnimationEvent
. Срабатывает, когда итерация CSS-анимации заканчивается и начинается другая.onAnimationIterationCapture
: ВерсияonAnimationIteration
, которая срабатывает в фазе захвата.onAnimationStart
: Функция обработчикаAnimationEvent
. Срабатывает при запуске CSS-анимации.onAnimationStartCapture
:onAnimationStart
, но срабатывает в фазе захватаonAuxClick
: Функция обработчикаMouseEvent
. Срабатывает, когда была нажата не основная кнопка указателя.onAuxClickCapture
: ВерсияonAuxClick
, которая срабатывает в фазе захвата.onBeforeInput
: Функция обработчикаInputEvent
. Срабатывает перед изменением значения редактируемого элемента. React пока не использует собственное событиеbeforeinput
, и вместо этого пытается заполнить его с помощью других событий.onBeforeInputCapture
: ВерсияonBeforeInput
, которая срабатывает в фазе захвата.onBlur
: Функция обработчикаFocusEvent
. Срабатывает, когда элемент теряет фокус. В отличие от встроенного события браузераblur
, в React событиеonBlur
пузырится.onBlurCapture
: ВерсияonBlur
, которая срабатывает в фазе захвата.onClick
: Функция обработчикаMouseEvent
. Срабатывает при нажатии основной кнопки на указывающем устройстве.onClickCapture
: ВерсияonClick
, которая срабатывает в фазе захватаonCompositionStart
: Функция обработчикаCompositionEvent
. Срабатывает, когда редактор методов ввода начинает новую сессию композиции.onCompositionStartCapture
: Версия функцииonCompositionStart
, которая срабатывает в фазе захвата.onCompositionEnd
: Функция обработчикаCompositionEvent
. Срабатывает, когда редактор методов ввода завершает или отменяет сеанс композиции.onCompositionEndCapture
: Версия функцииonCompositionEnd
, которая срабатывает в фазе захвата.onCompositionUpdate
: Функция обработчикаCompositionEvent
. Срабатывает, когда редактор метода ввода получает новый символ.onCompositionUpdateCapture
: Версия функцииonCompositionUpdate
, которая срабатывает в фазе захвата.onContextMenu
: Функция обработчикаMouseEvent
. Срабатывает, когда пользователь пытается открыть контекстное меню.onContextMenuCapture
: ВерсияonContextMenu
, которая срабатывает в фазе захвата.onCopy
: Функция обработчикаClipboardEvent
. Срабатывает, когда пользователь пытается скопировать что-либо в буфер обмена.onCopyCapture
: ВерсияonCopy
, которая срабатывает в фазе захвата.onCut
: Функция обработчикаClipboardEvent
. Срабатывает, когда пользователь пытается вырезать что-то в буфере обмена.onCutCapture
: ВерсияonCut
, которая срабатывает в фазе захвата.onDoubleClick
: Функция обработчикаMouseEvent
. Срабатывает, когда пользователь дважды щелкает мышью. Соответствует событию браузераdblclick
.onDoubleClickCapture
: ВерсияonDoubleClick
, которая срабатывает в фазе захвата.onDrag
: Функция обработчикаDragEvent
. Срабатывает, когда пользователь что-то перетаскивает.onDragCapture
: Версия функцииonDrag
, которая срабатывает в фазе захвата.onDragEnd
: Функция обработчикаDragEvent
. Срабатывает, когда пользователь прекращает перетаскивать что-то.onDragEndCapture
: Версия функцииonDragEnd
, которая срабатывает в фазе захвата.onDragEnter
: Функция обработчикаDragEvent
. Срабатывает, когда перетаскиваемое содержимое попадает в допустимую цель падения.onDragEnterCapture
: Версия функцииonDragEnter
, которая срабатывает в фазе захвата.onDragOver
: Функция обработчикаDragEvent
. Срабатывает на действительной цели падения, когда перетаскиваемое содержимое перетаскивается на нее. Вы должны вызватьe.preventDefault()
здесь, чтобы разрешить перетаскивание.onDragOverCapture
: ВерсияonDragOver
, которая срабатывает в фазе захвата.onDragStart
: Функция обработчикаDragEvent
. Срабатывает, когда пользователь начинает перетаскивать элемент.onDragStartCapture
: ВерсияonDragStart
, которая срабатывает в фазе захвата.onDrop
: Функция обработчикаDragEvent
. Срабатывает, когда что-то падает на допустимую цель падения.onDropCapture
: ВерсияonDrop
, которая срабатывает в фазе захвата.onFocus
: Функция обработчикаFocusEvent
. Срабатывает, когда элемент потерял фокус. В отличие от встроенного события браузераfocus
, в React событиеonFocus
пузырится.onFocusCapture
: ВерсияonFocus
, которая срабатывает в фазе захватаonGotPointerCapture
: Функция обработчикаPointerEvent
. Срабатывает, когда элемент программно захватывает указатель.onGotPointerCaptureCapture
: ВерсияonGotPointerCapture
, которая срабатывает в фазе захвата.onKeyDown
: Функция обработчикаKeyboardEvent
. Срабатывает при нажатии клавиши.onKeyDownCapture
: Версия функцииonKeyDown
, которая срабатывает в фазе захвата.onKeyPress
: Функция обработчикаKeyboardEvent
. Исправлено. Вместо нее используйтеonKeyDown
илиonBeforeInput
.onKeyPressCapture
: ВерсияonKeyPress
, которая срабатывает в фазе захвата.onKeyUp
: Функция обработчикаKeyboardEvent
. Срабатывает при отпускании клавиши.onKeyUpCapture
: Версия функцииonKeyUp
, которая срабатывает в фазе захвата.onLostPointerCapture
: Функция обработчикаPointerEvent
. Срабатывает, когда элемент перестает захватывать указатель.onLostPointerCaptureCapture
: ВерсияonLostPointerCapture
, которая срабатывает в фазе захвата.onMouseDown
: Функция обработчикаMouseEvent
. Срабатывает при нажатии указателя вниз.onMouseDownCapture
: ВерсияonMouseDown
, которая срабатывает в фазе захвата.onMouseEnter
: Функция обработчикаMouseEvent
. Срабатывает, когда указатель перемещается внутри элемента. Не имеет фазы захвата. Вместо этогоonMouseLeave
иonMouseEnter
распространяются от покидаемого элемента к вводимому.onMouseLeave
: Функция обработчикаMouseEvent
. Срабатывает, когда указатель перемещается за пределы элемента. Не имеет фазы захвата. Вместо этогоonMouseLeave
иonMouseEnter
распространяются от покидаемого элемента к вводимому.onMouseMove
: Функция обработчикаMouseEvent
. Срабатывает при изменении координат указателя.onMouseMoveCapture
: Версия функцииonMouseMove
, которая срабатывает в фазе захвата.onMouseOut
: Функция обработчикаMouseEvent
. Срабатывает, когда указатель перемещается за пределы элемента, или если он перемещается в дочерний элемент.onMouseOutCapture
: Версия функцииonMouseOut
, которая срабатывает в фазе захвата.onMouseUp
: Функция обработчикаMouseEvent
. Срабатывает при освобождении указателя.onMouseUpCapture
: Версия функцииonMouseUp
, которая срабатывает в фазе захвата.onPointerCancel
: Функция обработчикаPointerEvent
. Срабатывает, когда браузер отменяет взаимодействие с указателем.onPointerCancelCapture
: ВерсияonPointerCancel
, которая срабатывает в фазе захвата.onPointerDown
: Функция обработчикаPointerEvent
. Срабатывает, когда указатель становится активным.onPointerDownCapture
: ВерсияonPointerDown
, которая срабатывает в фазе захвата.onPointerEnter
: Функция обработчикаPointerEvent
. Срабатывает, когда указатель перемещается внутри элемента. Не имеет фазы захвата. Вместо этогоonPointerLeave
иonPointerEnter
распространяются от покидаемого элемента к вводимому.onPointerLeave
: Функция обработчикаPointerEvent
. Срабатывает, когда указатель перемещается за пределы элемента. Не имеет фазы захвата. Вместо этогоonPointerLeave
иonPointerEnter
распространяются от покидаемого элемента к вводимому.onPointerMove
: Функция обработчикаPointerEvent
. Срабатывает при изменении координат указателя.onPointerMoveCapture
: ВерсияonPointerMove
, которая срабатывает в фазе захватаonPointerOut
: Функция обработчикаPointerEvent
. Срабатывает при перемещении указателя за пределы элемента, при отмене взаимодействия с указателем и по некоторым другим причинам.onPointerOutCapture
: ВерсияonPointerOut
, которая срабатывает в фазе захвата.onPointerUp
: Функция обработчикаPointerEvent
. Срабатывает, когда указатель больше не активен.onPointerUpCapture
: ВерсияonPointerUp
, которая срабатывает в фазе захвата.onPaste
: Функция обработчикаClipboardEvent
. Срабатывает, когда пользователь пытается вставить что-то из буфера обмена.onPasteCapture
: ВерсияonPaste
, которая срабатывает в фазе захвата.onScroll
: Функция обработчикаevent
. Срабатывает, когда элемент был прокручен. Это событие не вызывает пузырьков.onScrollCapture
: ВерсияonScroll
, срабатывающая в фазе захвата.onSelect
: Функция обработчикаevent
. Срабатывает после изменения выбора внутри редактируемого элемента, например, ввода. React расширяет событиеonSelect
, чтобы оно работало и для элементовcontentEditable={true}
. Кроме того, React расширяет его для срабатывания при пустом выделении и при редактировании (которое может повлиять на выделение).onSelectCapture
: ВерсияonSelect
, которая срабатывает в фазе захватаonTouchCancel
: Функция обработчикаTouchEvent
. Срабатывает, когда браузер отменяет сенсорное взаимодействие.onTouchCancelCapture
: ВерсияonTouchCancel
, которая срабатывает в фазе захвата.onTouchEnd
: Функция обработчикаTouchEvent
. Срабатывает при удалении одной или нескольких точек касания.onTouchEndCapture
: ВерсияonTouchEnd
, которая срабатывает в фазе захвата.onTouchMove
: Функция обработчикаTouchEvent
. Вызывает перемещение одной или нескольких точек касания.onTouchMoveCapture
: ВерсияonTouchMove
, которая срабатывает в фазе захвата.onTouchStart
: Функция обработчикаTouchEvent
. Срабатывает при размещении одной или нескольких точек касания.onTouchStartCapture
: ВерсияonTouchStart
, которая срабатывает в фазе захвата.onTransitionEnd
: Функция обработчикаTransitionEvent
. Срабатывает при завершении CSS-перехода.onTransitionEndCapture
: Версия функцииonTransitionEnd
, которая срабатывает в фазе захвата.onWheel
: Функция обработчикаWheelEvent
. Срабатывает, когда пользователь поворачивает кнопку колеса.onWheelCapture
: ВерсияonWheel
, которая срабатывает в фазе захватароль
: Строка. Определяет роль элемента в явном виде для вспомогательных технологий.slot
: Строка. Указывает имя слота при использовании теневого DOM. В React эквивалентная схема обычно достигается путем передачи JSX в качестве props, например<Layout left={<Sidebar />} right={<Content />} />
.spellCheck
: Булево значение или null. При явном значенииtrue
илиfalse
включает или выключает проверку орфографии.tabIndex
: Число. Переопределяет поведение кнопки Tab по умолчанию. Избегайте использования значений, отличных от-1
и0
.title
: Строка. Определяет текст подсказки для элемента.translate
: Либоyes
, либоno
. Передачаno
исключает перевод содержимого элемента.
Вы также можете передавать пользовательские атрибуты в качестве пропсов, например, mycustomprop="someValue"
. Это может быть полезно при интеграции со сторонними библиотеками. Имя пользовательского атрибута должно быть в нижнем регистре и не должно начинаться с on
. Значение будет преобразовано в строку. Если вы передадите null
или undefined
, пользовательский атрибут будет удален.
Эти события срабатывают только для элементов <form>
:
onReset
: Функция обработчикаevent
. Срабатывает при сбросе формы.onResetCapture
: Версия функцииonReset
, которая срабатывает в фазе захвата.onSubmit
: Функция обработчикаevent
. Срабатывает при отправке формы.onSubmitCapture
: ВерсияonSubmit
, которая срабатывает на фазе захвата.
Эти события срабатывают только для элементов <dialog>
. В отличие от событий браузера, в React они вызывают пузырьки:
onCancel
: Функция обработчикаevent
. Срабатывает, когда пользователь пытается закрыть диалог.onCancelCapture
: ВерсияonCancel
, которая срабатывает в фазе захвата.onClose
: Функция обработчикаevent
. Срабатывает, когда диалог был закрыт.onCloseCapture
: ВерсияonClose
, которая срабатывает в фазе захвата.
Эти события срабатывают только для элементов <details>
. В отличие от браузерных событий, в React они вызывают пузырьки:
onToggle
: Функция обработчикаevent
. Срабатывает, когда пользователь переключает детали.onToggleCapture
: ВерсияonToggle
, которая срабатывает в фазе захвата.
Эти события происходят для элементов <img>
, <iframe>
, <object>
, <embed>
, <link>
и SVG <image>
. В отличие от событий браузера, в React они "всплывают":
onLoad
: Функция обработчикаevent
. Срабатывает, когда ресурс загрузился.onLoadCapture
: ВерсияonLoad
, которая срабатывает на фазе захвата.onError
: Функция обработчикаevent
. Срабатывает, когда ресурс не может быть загружен.onErrorCapture
: ВерсияonError
, которая срабатывает в фазе захвата.
Эти события происходят для таких ресурсов, как <audio>
и <video>
. В отличие от браузерных событий, в React они "всплывают":
onAbort
: Функция обработчикаevent
. Срабатывает, когда ресурс не загрузился полностью, но не из-за ошибки.onAbortCapture
: ВерсияonAbort
, срабатывающая на фазе захвата.onCanPlay
: Функция обработчикаevent
. Срабатывает, когда данных достаточно для начала воспроизведения, но недостаточно для воспроизведения до конца без буферизации.onCanPlayCapture
: ВерсияonCanPlay
, которая срабатывает в фазе захвата.onCanPlayThrough
: Функция обработчикаevent
. Срабатывает, когда данных достаточно, чтобы можно было начать воспроизведение без буферизации до конца.onCanPlayThroughCapture
: ВерсияonCanPlayThrough
, которая срабатывает в фазе захвата.onDurationChange
: Функция обработчикаevent
. Срабатывает при обновлении длительности носителя.onDurationChangeCapture
: ВерсияonDurationChange
, которая срабатывает в фазе захвата.onEmptied
: Функция обработчикаevent
. Срабатывает, когда носитель становится пустым.onEmptiedCapture
: ВерсияonEmptied
, которая срабатывает в фазе захвата.onEncrypted
: Функция обработчикаevent
. Срабатывает, когда браузер сталкивается с зашифрованным медиа.onEncryptedCapture
: ВерсияonEncrypted
, которая срабатывает на фазе захвата.onEnded
: Функция обработчикаevent
. Срабатывает, когда воспроизведение останавливается, потому что больше нечего воспроизводить.onEndedCapture
: ВерсияonEnded
, которая срабатывает на фазе захвата.onError
: Функция обработчикаevent
. Срабатывает, когда ресурс не может быть загружен.onErrorCapture
: ВерсияonError
, которая срабатывает на фазе захвата.onLoadedData
: Функция обработчикаevent
. Срабатывает при загрузке текущего кадра воспроизведения.onLoadedDataCapture
: ВерсияonLoadedData
, которая срабатывает в фазе захвата.onLoadedMetadata
: Функция обработчикаevent
. Срабатывает при загрузке метаданных.onLoadedMetadataCapture
: ВерсияonLoadedMetadata
, которая срабатывает в фазе захвата.- Срабатывает при загрузке метаданных.
onLoadedMetadataCapture
: ВерсияonLoadedMetadata
, которая срабатывает в фазе захвата.onLoadStart
: Функция обработчикаevent
. Срабатывает, когда браузер начал загрузку ресурса.onLoadStartCapture
: ВерсияonLoadStart
, которая срабатывает на фазе захвата.onPause
: Функция обработчикаevent
. Срабатывает, когда медиа было приостановлено.onPauseCapture
: ВерсияonPause
, которая срабатывает в фазе захвата.onPlay
: Функция обработчикаevent
. Срабатывает, когда медиа больше не приостановлено.onPlayCapture
: ВерсияonPlay
, срабатывающая в фазе захвата.onPlaying
: Функция обработчикаevent
. Срабатывает, когда медиа начинает или возобновляет воспроизведение.onPlayingCapture
: Версия функцииonPlaying
, которая срабатывает в фазе захвата.onProgress
: Функция обработчикаevent
. Периодически срабатывает во время загрузки ресурса.onProgressCapture
: Версия функцииonProgress
, которая срабатывает в фазе захвата.onRateChange
: Функция обработчикаevent
. Срабатывает при изменении скорости воспроизведения.onRateChangeCapture
: ВерсияonRateChange
, срабатывающая в фазе захвата.onResize
: Функция обработчикаevent
. Срабатывает при изменении размера видео.onResizeCapture
: ВерсияonResize
, срабатывающая на фазе захвата.onSeeked
: Функция обработчикаevent
. Срабатывает при завершении операции поиска.onSeekedCapture
: Версия функцииonSeeked
, которая срабатывает в фазе захвата.onSeeking
: Функция обработчикаevent
. Срабатывает, когда начинается операция поиска.onSeekingCapture
: Версия функцииonSeeking
, которая срабатывает в фазе захвата.onStalled
: Функция обработчикаevent
. Срабатывает, когда браузер ожидает данные, но они не загружаются.onStalledCapture
: Версия функцииonStalled
, которая срабатывает в фазе захвата.onSuspend
: Функция обработчикаevent
. Срабатывает, когда загрузка ресурса была приостановлена.onSuspendCapture
: ВерсияonSuspend
, которая срабатывает в фазе захвата.onTimeUpdate
: Функция обработчикаevent
. Срабатывает при обновлении текущего времени воспроизведения.onTimeUpdateCapture
: ВерсияonTimeUpdate
, которая срабатывает в фазе захвата.onVolumeChange
: Функция обработчикаevent
. Срабатывает при изменении громкости.onVolumeChangeCapture
: Версия функцииonVolumeChange
, которая срабатывает в фазе захвата.onWaiting
: Функция обработчикаevent
. Срабатывает, когда воспроизведение остановилось из-за временного отсутствия данных.onWaitingCapture
: Версия функцииonWaiting
, которая срабатывает в фазе захвата.
Предостережения
- Вы не можете одновременно передавать
children
иdangerouslySetInnerHTML
. - Некоторые события (например,
onAbort
иonLoad
) не отображаются в браузере, но отображаются в React.
ref
функция¶
Вместо объекта ref (например, возвращаемого useRef
), вы можете передать функцию в атрибут ref
.
1 |
|
Смотрите пример использования обратного вызова ref
.
Когда DOM-узел div
будет добавлен на экран, React вызовет ваш обратный вызов ref
с DOM-узлом node
в качестве аргумента. Когда этот DOM-узел div
будет удален, React вызовет ваш обратный вызов ref
с аргументом null
.
React также будет вызывать ваш обратный вызов ref
всякий раз, когда вы передадите другой обратный вызов ref
. В приведенном выше примере (node) => { ... }
- это разные функции при каждом рендере. При повторном рендеринге вашего компонента будет вызвана предыдущая функция с null
в качестве аргумента, а следующая функция будет вызвана с DOM-узлом.
Параметры
node
: Узел DOM илиnull
. React передаст вам узел DOM, когда ссылка будет присоединена, иnull
, когда ссылка будет отсоединена. Если вы не передадите одну и ту же ссылку на функцию для обратного вызоваref
при каждом рендере, обратный вызов будет временно отсоединен и вновь присоединен при каждом повторном рендере компонента.
Возвращает
Не возвращает ничего из обратного вызова ref
.
Объект события React¶
Ваши обработчики событий будут получать объект события React. Он также иногда известен как "синтетическое событие".
1 2 3 4 5 |
|
Он соответствует тому же стандарту, что и базовые события DOM, но исправляет некоторые несоответствия в браузере.
Некоторые события React не отображаются непосредственно на "родные" события браузера. Например, в onMouseLeave
, e.nativeEvent
будет указывать на событие mouseout
. Конкретное сопоставление не является частью общедоступного API и может измениться в будущем. Если вам зачем-то нужно базовое событие браузера, считайте его из e.nativeEvent
.
Свойства
Объекты событий React реализуют некоторые из стандартных свойств Event
:
bubbles
: Булево. Возвращает, распространяется ли событие через DOM.cancelable
: Булево. Возвращает, может ли событие быть отменено.currentTarget
: Узел DOM. Возвращает узел, к которому прикреплен текущий обработчик в дереве React.defaultPrevented
: Булево значение. Возвращает, была ли вызвана функцияpreventDefault
.eventPhase
: Число. Возвращает, в какой фазе находится событие в данный момент.isTrusted
: Булево значение. Возвращает, было ли событие инициировано пользователем.target
: Узел DOM. Возвращает узел, на котором произошло событие (который может быть дальним потомком).timeStamp
: Число. Возвращает время, когда произошло событие.
Кроме того, объекты событий React предоставляют следующие свойства:
nativeEvent
: DOMEvent
. Оригинальный объект события браузера.
Методы
Объекты событий React реализуют некоторые из стандартных методов Event
:
preventDefault()
: Предотвращает действие браузера по умолчанию для данного события.stopPropagation()
: Останавливает распространение события по дереву React.
Кроме того, объекты событий React предоставляют следующие методы:
isDefaultPrevented()
: Возвращает булево значение, указывающее, было ли вызваноpreventDefault
.isPropagationStopped()
: Возвращает булево значение, указывающее, была ли вызвана функцияstopPropagation
.persist()
: Не используется в React DOM. В React Native вызовите эту функцию, чтобы прочитать свойства события после его наступления.isPersistent()
: Не используется в React DOM. В React Native возвращает, была ли вызвана функцияpersist
.
Ограничения
- Значения
currentTarget
,eventPhase
,target
иtype
отражают значения, которые ожидает ваш код React. Под капотом React прикрепляет обработчики событий к корню, но это не отражается в объектах событий React. Например,e.currentTarget
может не совпадать с базовымe.nativeEvent.currentTarget
. Для полизаполненных событийe.type
(тип события React) может отличаться отe.nativeEvent.type
(базовый тип).
AnimationEvent
¶
Тип обработчика событий для событий CSS animation.
1 2 3 4 5 6 7 8 9 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиAnimationEvent
:
ClipboardEvent
¶
Тип обработчика событий для событий Clipboard API.
1 2 3 4 5 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиClipboardEvent
:
CompositionEvent
¶
Тип обработчика событий для событий редактора методов ввода (IME).
1 2 3 4 5 6 7 8 9 10 11 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиCompositionEvent
:
DragEvent
¶
Тип обработчика событий для событий HTML Drag and Drop API.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Параметры
-
e
: React event object с этими дополнительными свойствамиDragEvent
:Он также включает унаследованные свойства
MouseEvent
:altKey
button
buttons
ctrlKey
clientX
clientY
getModifierState(key)
metaKey
movementX
movementY
pageX
pageY
relatedTarget
screenX
screenY
shiftKey
Он также включает унаследованные свойства
UIEvent
:
FocusEvent
¶
Тип обработчика событий для событий фокуса.
1 2 3 4 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиFocusEvent
:Он также включает унаследованные свойства
UIEvent
:
Event
¶
Тип обработчика событий для общих событий.
Параметры
e
: объект события React без дополнительных свойств.
InputEvent
¶
Тип обработчика события для события onBeforeInput
.
1 2 3 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиInputEvent
:
KeyboardEvent
¶
Тип обработчика событий для событий клавиатуры.
1 2 3 4 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиKeyboardEvent
:altKey
charCode
code
ctrlKey
getModifierState(key)
key
keyCode
locale
metaKey
location
repeat
shiftKey
which
Он также включает унаследованные свойства
UIEvent
:
MouseEvent
¶
Тип обработчика событий для событий мыши.
1 2 3 4 5 6 7 8 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиMouseEvent
:altKey
button
buttons
ctrlKey
clientX
clientY
getModifierState(key)
metaKey
movementX
movementY
pageX
pageY
relatedTarget
screenX
screenY
shiftKey
Он также включает унаследованные свойства
UIEvent
:
PointerEvent
¶
Тип обработчика событий для событий указателя.
1 2 3 4 5 6 7 |
|
Параметры
-
e
: Объект React event object с этими дополнительными свойствамиPointerEvent
:Он также включает унаследованные свойства
MouseEvent
:altKey
button
buttons
ctrlKey
clientX
clientY
getModifierState(key)
metaKey
movementX
movementY
pageX
pageY
relatedTarget
screenX
screenY
shiftKey
Он также включает унаследованные свойства
UIEvent
:
TouchEvent
¶
Тип обработчика событий для событий касания.
1 2 3 4 5 6 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиTouchEvent
:Он также включает унаследованные свойства
UIEvent
:
TransitionEvent
¶
Тип обработчика событий для событий перехода CSS.
1 2 3 |
|
Параметры
-
e
: объект события React с этими дополнительными свойствамиTransitionEvent
:
UIEvent
¶
Тип обработчика событий для общих событий пользовательского интерфейса.
1 |
|
Параметры
WheelEvent
¶
Тип обработчика события для события onWheel
.
1 |
|
Параметры
-
e
: React event object с этими дополнительными свойствамиWheelEvent
:Он также включает унаследованные свойства
MouseEvent
:altKey
button
buttons
ctrlKey
clientX
clientY
getModifierState(key)
metaKey
movementX
movementY
pageX
pageY
relatedTarget
screenX
screenY
shiftKey
Он также включает унаследованные свойства
UIEvent
:
Использование¶
Применение стилей CSS¶
В React вы указываете CSS-класс с помощью className
. Это работает как атрибут class
в HTML:
1 |
|
Затем вы пишете правила CSS для него в отдельном файле CSS:
1 2 3 4 |
|
React не предписывает, как добавлять файлы CSS. В простейшем случае вы добавляете тег <link>
в HTML. Если вы используете инструмент сборки или фреймворк, обратитесь к его документации, чтобы узнать, как добавить CSS-файл в ваш проект.
Иногда значения стиля зависят от данных. Используйте атрибут style
, чтобы передать некоторые стили динамически:
1 2 3 4 5 6 7 |
|
В приведенном выше примере style={{}}
- это не специальный синтаксис, а обычный объект {}
внутри style={ }
фигурные скобки JSX. Мы рекомендуем использовать атрибут style
только тогда, когда ваши стили зависят от переменных JavaScript.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Как применить несколько классов CSS условно?
Чтобы применить классы CSS условно, вам нужно создать строку className
самостоятельно с помощью JavaScript.
Например, className={'row ' + (isSelected ? 'selected': '')}
создаст либо className="row"
, либо className="row selected"
в зависимости от того, является ли isSelected
true
.
Чтобы сделать это более читабельным, вы можете использовать небольшую вспомогательную библиотеку, например classnames
:
1 2 3 4 5 6 7 8 9 10 11 |
|
Это особенно удобно, если у вас несколько условных классов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Манипулирование узлом DOM с помощью ссылки¶
Иногда вам нужно получить узел DOM браузера, связанный с тегом в JSX. Например, если вы хотите сфокусировать input
при нажатии на кнопку, вам нужно вызвать focus()
на DOM-узле браузера input
.
Чтобы получить DOM-узел браузера для тега, объявите ссылку и передайте ее в качестве атрибута ref
этому тегу:
1 2 3 4 5 6 7 8 9 10 |
|
React поместит узел DOM в inputRef.current
после того, как он будет выведен на экран.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Читайте больше о манипулировании DOM с помощью ссылок и посмотрите больше примеров.
Для более сложных случаев использования атрибут ref
также принимает функцию обратного вызова.
Опасная установка внутреннего HTML¶
Вы можете передать необработанную строку HTML элементу следующим образом:
1 2 |
|
Это опасно. Как и в случае со свойством innerHTML
, лежащим в основе DOM, вы должны проявлять крайнюю осторожность! Если только разметка не поступает из абсолютно надежного источника, то таким образом можно легко внедрить XSS уязвимость.
Например, если вы используете библиотеку Markdown, которая преобразует Markdown в HTML, доверяете, что ее парсер не содержит ошибок, а пользователь видит только свой собственный ввод, вы можете отобразить полученный HTML следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Чтобы понять, почему рендеринг произвольного HTML опасен, замените приведенный выше код на следующий:
1 2 3 4 5 6 7 8 9 10 |
|
Код, встроенный в HTML, будет запущен. Хакер может использовать эту брешь в безопасности для кражи информации пользователя или выполнения действий от его имени. Используйте dangerouslySetInnerHTML
только с доверенными и проверенными данными.
Обработка событий мыши¶
Этот пример показывает некоторые общие события мыши и время их возникновения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
|
Обработка событий указателя¶
Этот пример показывает некоторые общие события pointer-events и время их возникновения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
|
Обработка событий фокуса¶
В React, focus events пузырьковый. Вы можете использовать currentTarget
и relatedTarget
, чтобы отличить, если события фокусировки или размытия возникли вне родительского элемента. Пример показывает, как обнаружить фокусировку дочернего элемента, фокусировку родительского элемента, а также как обнаружить вхождение или выход фокуса из всего поддерева.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
Обработка событий клавиатуры¶
Этот пример показывает некоторые общие клавиатурные события и время их возникновения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Источник — https://react.dev/reference/react-dom/components/common