Общие компоненты (например, <div>)
Все встроенные компоненты браузера, такие как <div>, поддерживают некоторые общие свойства и события.
-
Справочник
- Общие компоненты (например,
<div>) refфункция обратного вызова- Объект события React
AnimationEventфункция обработчикаClipboardEventфункция обработчикаCompositionEventфункция обработчикаDragEventфункция обработчикаFocusEventфункция обработчикаEventфункция обработчикаInputEventфункция обработчикаKeyboardEventфункция обработчикаMouseEventфункция обработчикаPointerEventфункция обработчикаTouchEventфункция обработчикаTransitionEventфункция обработчикаUIEventфункция обработчикаWheelEventфункция обработчика
- Общие компоненты (например,
- Использование
Справочник
Общие компоненты (например, <div>)
<div className="wrapper">Some content</div> См. дополнительные примеры ниже.
Свойства
Эти специальные свойства React поддерживаются для всех встроенных компонентов:
-
children: Узел React (элемент, строка, число, портал, пустой узел, какnull,undefinedи булевы значения, или массив других узлов React). Указывает содержимое внутри компонента. При использовании JSX вы обычно указываете свойствоchildrenнеявно, вложенные теги, как<div><span /></div>. -
dangerouslySetInnerHTML: Объект вида{ __html: '<p>some html</p>' }со строкой исходного HTML внутри. Заменяет свойствоinnerHTMLузла DOM и отображает переданный HTML внутри. Это следует использовать с большой осторожностью! Если HTML не является надёжным (например, если он основан на пользовательских данных), вы рискуете ввести уязвимость XSS. Узнайте больше об использованииdangerouslySetInnerHTML. -
ref: Объект ref изuseRefилиcreateRef, или функция обратного вызоваref, или строка для устаревшего ref. Ваш ref будет заполнен элементом DOM для этого узла. Узнайте больше о работе с DOM с помощью ref. -
suppressContentEditableWarning: Логическое значение. Еслиtrue, подавляет предупреждение, которое React показывает для элементов, которые имеют какchildren, так иcontentEditable={true}(которые обычно не работают вместе). Используйте это, если вы создаете библиотеку текстового ввода, которая управляет содержимымcontentEditableвручную. -
suppressHydrationWarning: Логическое значение. Если вы используете рендеринг на сервере, обычно появляется предупреждение, когда сервер и клиент рендерят разное содержимое. В некоторых редких случаях (например, со временем), гарантировать точное совпадение очень сложно или невозможно. Если вы установитеsuppressHydrationWarningвtrue, React не будет предупреждать вас о несовпадениях в атрибутах и содержании этого элемента. Он работает только на одном уровне вглубь и предназначен для использования как крайняя мера. Не злоупотребляйте этим. Узнайте о подавлении ошибок несоответствия гидратации. -
style: Объект со стилями CSS, например{ fontWeight: 'bold', margin: 20 }. Аналогично свойству DOMstyle, имена свойств CSS должны быть написаны какcamelCase, например,fontWeightвместоfont-weight. Вы можете передавать строки или числа в качестве значений. Если вы передаёте число, какwidth: 100, React автоматически добавитpx(«пиксели») к значению, если это не безразмерное свойство. Рекомендуется использоватьstyleтолько для динамических стилей, где значения стилей неизвестны заранее. В других случаях применение простых CSS-классов сclassNameболее эффективно. Узнайте больше оclassNameиstyle.
Эти стандартные свойства DOM также поддерживаются для всех встроенных компонентов:
-
accessKey: Строка. Указывает комбинацию клавиш для элемента. Обычно не рекомендуется. -
aria-*: Атрибуты ARIA позволяют задать информацию о дереве доступности для данного элемента. Смотрите атрибуты ARIA для полной справки. В React все имена атрибутов ARIA точно такие же, как и в HTML. -
autoCapitalize: Строка. Указывает, следует ли и как следует капитализировать пользовательский ввод. -
className: Строка. Задает имя класса CSS элемента. Подробнее о применении стилей CSS. -
contentEditable: Логическое значение. Еслиtrue, браузер позволяет пользователю напрямую редактировать рендер элемента. Это используется для реализации библиотек для работы с богатым текстом, таких как Lexical. React предупреждает, если вы пытаетесь передать дочерние элементы React элементу сcontentEditable={true}, так как React не сможет обновить его содержимое после редактирования пользователем. -
data-*: Атрибуты данных позволяют прикрепить данные в виде строки к элементу, например,data-fruit="banana". В React они не часто используются, так как обычно данные считываются из свойств props или состояния. -
dir: Либо'ltr', либо'rtl'. Указывает направление текста элемента. -
draggable: Логическое значение. Указывает, может ли элемент быть перетащен. Часть API перетаскивания HTML. -
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: AClipboardEventобработчик функции. Срабатывает, когда пользователь пытается скопировать что-то в буфер обмена. -
onCopyCapture: A version ofonCopythat fires in the фазе захвата. -
onCut: AClipboardEventобработчик функции. Срабатывает, когда пользователь пытается вырезать что-то в буфер обмена. -
onCutCapture: A version ofonCutthat fires in the фазе захвата. -
onDoubleClick: AMouseEventобработчик функции. Срабатывает, когда пользователь дважды щелкает. Соответствует событию браузераdblclick. -
onDoubleClickCapture: A version ofonDoubleClickthat fires in the фазе захвата. -
onDrag: ADragEventобработчик функции. Срабатывает, пока пользователь перетаскивает что-то. -
onDragCapture: A version ofonDragthat fires in the фазе захвата. -
onDragEnd: ADragEventобработчик функции. Срабатывает, когда пользователь перестаёт перетаскивать что-то. -
onDragEndCapture: A version ofonDragEndthat fires in the фазе захвата. -
onDragEnter: ADragEventобработчик функции. Срабатывает, когда перетаскиваемое содержимое входит в целевой элемент. -
onDragEnterCapture: A version ofonDragEnterthat fires in the фазе захвата. -
onDragOver: ADragEventобработчик функции. Срабатывает в целевом элементе, пока перетаскиваемое содержимое над ним. Вы должны вызватьe.preventDefault()здесь, чтобы разрешить поместить. -
onDragOverCapture: A version ofonDragOverthat fires in the фазе захвата. -
onDragStart: ADragEventобработчик функции. Срабатывает, когда пользователь начинает перетаскивание элемента. -
onDragStartCapture: A version ofonDragStartthat fires in the фазе захвата. -
onDrop: ADragEventобработчик функции. Срабатывает, когда что-то помещается в целевой элемент. -
onDropCapture: A version ofonDropthat fires in the фазе захвата. -
onFocus: AFocusEventобработчик функции. Срабатывает, когда элемент получает фокус. В отличие от встроенного браузерного событияfocus, в React событиеonFocusподнимается вверх по дереву DOM. -
onFocusCapture: A version ofonFocusthat fires in the фазе захвата. -
onGotPointerCapture: APointerEventобработчик функции. Срабатывает, когда элемент программно захватывает указатель. -
onGotPointerCaptureCapture: A version ofonGotPointerCapturethat fires in the фазе захвата. -
onKeyDown: AKeyboardEventобработчик функции. Срабатывает при нажатии клавиши. -
onKeyDownCapture: A version ofonKeyDownthat fires in the фазе захвата. -
onKeyPress: AKeyboardEventобработчик функции. Устарело. ИспользуйтеonKeyDownилиonBeforeInputвместо этого. -
onKeyPressCapture: A version ofonKeyPressthat fires in the фазе захвата. -
onKeyUp: AKeyboardEventобработчик функции. Срабатывает при отпускании клавиши. -
onKeyUpCapture: A version ofonKeyUpthat fires in the фазе захвата. -
onLostPointerCapture: APointerEventобработчик функции. Срабатывает, когда элемент прекращает захват указателя. -
onLostPointerCaptureCapture: A version ofonLostPointerCapturethat fires in the фазе захвата. -
onMouseDown: AMouseEventобработчик функции. Срабатывает, когда указатель нажат. -
onMouseDownCapture: A version ofonMouseDownthat fires in the фазе захвата. -
onMouseEnter: AMouseEventобработчик функции. Срабатывает, когда указатель перемещается внутрь элемента. Не имеет фазы захвата. Вместо этогоonMouseLeaveиonMouseEnterраспространяются от элемента, из которого выходят, к элементу, в который входят. -
onMouseLeave: AMouseEventобработчик функции. Срабатывает, когда указатель перемещается за пределы элемента. Не имеет фазы захвата. Вместо этогоonMouseLeaveиonMouseEnterраспространяются от элемента, из которого выходят, к элементу, в который входят. -
onMouseMove: AMouseEventобработчик функции. Срабатывает, когда координаты указателя меняются. -
onMouseMoveCapture: A version ofonMouseMovethat fires in the фазе захвата. -
onMouseOut: AMouseEventобработчик функции. Срабатывает, когда указатель перемещается за пределы элемента или в дочерний элемент. -
onMouseOutCapture: A version ofonMouseOutthat fires in the фазе захвата. -
onMouseUp: AMouseEventобработчик функции. Срабатывает, когда указатель отпущен. -
onMouseUpCapture: A version ofonMouseUpthat fires in the фазе захвата. -
onPointerCancel: APointerEventобработчик функции. Срабатывает, когда браузер отменяет взаимодействие с указателем. -
onPointerCancelCapture: A version ofonPointerCancelthat fires in the фазе захвата. -
onPointerDown: APointerEventобработчик функции. Срабатывает, когда указатель активируется. -
onPointerDownCapture: A version ofonPointerDownthat fires in the фазе захвата. -
onPointerEnter: APointerEventобработчик функции. Срабатывает, когда указатель перемещается внутрь элемента. Не имеет фазы захвата. Вместо этогоonPointerLeaveиonPointerEnterраспространяются от элемента, из которого выходят, к элементу, в который входят. -
onPointerLeave: APointerEventобработчик функции. Срабатывает, когда указатель перемещается за пределы элемента. Не имеет фазы захвата. Вместо этогоonPointerLeaveиonPointerEnterраспространяются от элемента, из которого выходят, к элементу, в который входят.
-
onPointerMove: Функция-обработчикPointerEvent. Срабатывает, когда указатель изменяет координаты. -
onPointerMoveCapture: ВерсияonPointerMove, срабатывающая на фазе захвата. -
onPointerOut: Функция-обработчикPointerEvent. Срабатывает, когда указатель выходит за пределы элемента, если взаимодействие с указателем отменено, и по некоторым другим причинам. -
onPointerOutCapture: ВерсияonPointerOut, срабатывающая на фазе захвата. -
onPointerUp: Функция-обработчикPointerEvent. Срабатывает, когда указатель больше не активен. -
onPointerUpCapture: ВерсияonPointerUp, срабатывающая на фазе захвата. -
onPaste: Функция-обработчикClipboardEvent. Срабатывает, когда пользователь пытается вставить что-то из буфера обмена. -
onPasteCapture: ВерсияonPaste, срабатывающая на фазе захвата. -
onScroll: Функция-обработчикEvent. Срабатывает, когда элемент прокручен. Это событие не поднимается вверх по дереву элементов. -
onScrollCapture: ВерсияonScroll, срабатывающая на фазе захвата. -
onSelect: Функция-обработчикEvent. Срабатывает после изменения выделения внутри редактируемого элемента, например, input. 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, срабатывающая на фазе захвата. -
role: Строка. Явно указывает роль элемента для вспомогательных технологий. -
slot: Строка. Указывает имя слота при использовании теневого DOM. В React, эквивалентный шаблон обычно достигается путём передачи JSX в качестве свойств, например<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, срабатывающий в фазе захвата. -
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.
<div ref={(node) => console.log(node)} /> См. пример использования ref обратного вызова.
Когда узел <div> DOM добавляется на экран, React вызовет ваш ref обработчик с узлом DOM node в качестве аргумента. Когда этот узел <div> DOM удаляется, React вызовет ваш ref обработчик с null.
React также вызовет ваш ref обработчик всякий раз, когда вы передадите другой ref обработчик. В приведенном выше примере (node) => { ... } — это другая функция на каждом рендере. Когда ваш компонент перерисовывается, предыдущая функция будет вызвана с null в качестве аргумента, а следующая — с узлом DOM.
Параметры
-
node: Узел DOM илиnull. React передаст вам узел DOM при подключении ссылки иnullпри отсоединении ссылкиref. Если вы не передаете ту же ссылку на функцию дляrefобработчика на каждом рендере, обработчик будет временно отсоединён и повторно подключён во время каждого перерендеринга компонента.
Canary
Возвращаемое значение
-
необязательное
cleanup function: Когда ссылкаrefотсоединена, React вызовет функцию очистки. Если функция не возвращаетсяrefобработчиком, React вызовет обработчик снова сnullв качестве аргумента, когдаrefотсоединится.
<div ref={(node) => {
console.log(node);
return () => {
console.log('Clean up', node)
}
}}>
Примечания
- Когда включен режим строгости, React выполнит один дополнительный цикл подготовки и очистки только для разработки перед первым реальным выполнением. Это тест на прочность, который гарантирует, что ваша логика очистки «соответствует» вашей логике подготовки и что она останавливает или отменяет всё, что делает подготовка. Если это вызывает проблему, реализуйте функцию очистки.
- Когда вы передаёте другой
refобработчик, React вызовет функцию очистки предыдущего обработчика, если она задана. Если функция очистки не определена,refобработчик будет вызван сnullв качестве аргумента. Следующая функция будет вызвана с узлом DOM.
Объект события React
Обработчики событий вашего приложения получат объект события React. Иногда он также называется «синтетическое событие».
<button onClick={e => {
console.log(e); // React event object
}} /> Он соответствует тому же стандарту, что и основанные события 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.
<div
onAnimationStart={e => console.log('onAnimationStart')}
onAnimationIteration={e => console.log('onAnimationIteration')}
onAnimationEnd={e => console.log('onAnimationEnd')}
/> Параметры
-
e: Объект события React React event object со следующими дополнительными свойствамиAnimationEvent:
ClipboardEvent функция обработчика
Тип обработчика событий для событий API буфера обмена.
<input
onCopy={e => console.log('onCopy')}
onCut={e => console.log('onCut')}
onPaste={e => console.log('onPaste')}
/> Параметры
-
e: Объект события React React event object со следующими дополнительными свойствамиClipboardEvent:
CompositionEvent функция обработчика
Тип обработчика событий для событий редактора метода ввода (IME).
<input
onCompositionStart={e => console.log('onCompositionStart')}
onCompositionUpdate={e => console.log('onCompositionUpdate')}
onCompositionEnd={e => console.log('onCompositionEnd')}
/> Параметры
-
e: Объект события React React event object со следующими дополнительными свойствамиCompositionEvent:
DragEvent функция обработчика
Тип обработчика событий для событий API перетаскивания HTML.
<>
<div
draggable={true}
onDragStart={e => console.log('onDragStart')}
onDragEnd={e => console.log('onDragEnd')}
>
Drag source
</div>
<div
onDragEnter={e => console.log('onDragEnter')}
onDragLeave={e => console.log('onDragLeave')}
onDragOver={e => { e.preventDefault(); console.log('onDragOver'); }}
onDrop={e => console.log('onDrop')}
>
Drop target
</div>
</> Параметры
-
e: A React event object with these extraDragEventproperties:It also includes the inherited
MouseEventproperties:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
It also includes the inherited
UIEventproperties:
FocusEvent обработчик события фокусировки
Тип обработчика событий фокусировки.
<input
onFocus={e => console.log('onFocus')}
onBlur={e => console.log('onBlur')}
/> Параметры
-
e: A React event object with these extraFocusEventproperties:It also includes the inherited
UIEventproperties:
Event функция-обработчик
Тип обработчика событий общего назначения.
Параметры
-
e: A React event object with no additional properties.
InputEvent функция-обработчик
Тип обработчика событий onBeforeInput.
<input onBeforeInput={e => console.log('onBeforeInput')} /> Параметры
-
e: A React event object with these extraInputEventproperties:
KeyboardEvent функция-обработчик
Тип обработчика событий клавиатуры.
<input
onKeyDown={e => console.log('onKeyDown')}
onKeyUp={e => console.log('onKeyUp')}
/> Параметры
-
e: A React event object with these extraKeyboardEventproperties:altKeycharCodecodectrlKeygetModifierState(key)keykeyCodelocalemetaKeylocationrepeatshiftKeywhich
It also includes the inherited
UIEventproperties:
MouseEvent функция-обработчик
Тип обработчика событий мыши.
<div
onClick={e => console.log('onClick')}
onMouseEnter={e => console.log('onMouseEnter')}
onMouseOver={e => console.log('onMouseOver')}
onMouseDown={e => console.log('onMouseDown')}
onMouseUp={e => console.log('onMouseUp')}
onMouseLeave={e => console.log('onMouseLeave')}
/> Параметры
-
e: A React event object with these extraMouseEventproperties:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
It also includes the inherited
UIEventproperties:
PointerEvent обработчик событий
Тип обработчика событий для событий указателя.
<div
onPointerEnter={e => console.log('onPointerEnter')}
onPointerMove={e => console.log('onPointerMove')}
onPointerDown={e => console.log('onPointerDown')}
onPointerUp={e => console.log('onPointerUp')}
onPointerLeave={e => console.log('onPointerLeave')}
/> Параметры
-
e: A React event object with these extraPointerEventproperties:It also includes the inherited
MouseEventproperties:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
It also includes the inherited
UIEventproperties:
TouchEvent обработчик событий
Тип обработчика событий для событий касания.
<div
onTouchStart={e => console.log('onTouchStart')}
onTouchMove={e => console.log('onTouchMove')}
onTouchEnd={e => console.log('onTouchEnd')}
onTouchCancel={e => console.log('onTouchCancel')}
/> Параметры
-
e: A React event object with these extraTouchEventproperties:It also includes the inherited
UIEventproperties:
TransitionEvent обработчик событий
Тип обработчика событий для событий перехода CSS.
<div
onTransitionEnd={e => console.log('onTransitionEnd')}
/> Параметры
-
e: A объект события React с дополнительнымиTransitionEventсвойствами:
UIEvent функция-обработчик событий
Тип обработчика событий для общих событий пользовательского интерфейса.
<div
onScroll={e => console.log('onScroll')}
/> Параметры
-
e: A объект события React с дополнительнымиUIEventсвойствами:
WheelEvent функция-обработчик событий
Обработчик событий для события onWheel.
<div
onWheel={e => console.log('onWheel')}
/> Параметры
-
e: A объект события React с дополнительнымиWheelEventсвойствами:Также содержит наследуемые
MouseEventсвойства:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
Также содержит наследуемые
UIEventсвойства:
Использование
Применение стилей CSS
В React вы указываете класс CSS с помощью className. Он работает как атрибут class в HTML:
<img className="avatar" /> Затем вы пишете правила CSS для него в отдельном файле CSS:
/* In your CSS */
.avatar {
border-radius: 50%;
} React не предписывает, как добавлять файлы CSS. В простейшем случае, вы добавите тег <link> в ваш HTML. Если вы используете инструмент сборки или фреймворк, проконсультируйтесь с его документацией, чтобы узнать, как добавить файл CSS в свой проект.
Иногда значения стилей зависят от данных. Используйте атрибут style для динамической передачи стилей:
<img
className="avatar"
style={{
width: user.imageSize,
height: user.imageSize
}}
/> В приведенном выше примере style={{}} не является специальным синтаксисом, а обычным объектом {} внутри style={ } JSX фигурных скобок. Рекомендуется использовать атрибут style только в том случае, когда ваши стили зависят от переменных JavaScript.
export default function Avatar({ user }) { return ( <img src={user.imageUrl} alt={'Photo of ' + user.name} className="avatar" style={{ width: user.imageSize, height: user.imageSize }} /> ); }
Подробное описание
Как применять несколько классов CSS условно?
Чтобы условно применить классы CSS, вам нужно самостоятельно сгенерировать строку className с помощью JavaScript.
Например, className={'row ' + (isSelected ? 'selected': '')} сгенерирует либо className="row" либо className="row selected" в зависимости от того, isSelected равняется true.
Чтобы сделать это более читаемым, вы можете использовать небольшой вспомогательный модуль, такой как classnames:
import cn from 'classnames';
function Row({ isSelected }) {
return (
<div className={cn('row', isSelected && 'selected')}>
...
</div>
);
}
Это особенно удобно, если у вас несколько условных классов:
import cn from 'classnames';
function Row({ isSelected, size }) {
return (
<div className={cn('row', {
selected: isSelected,
large: size === 'large',
small: size === 'small',
})}>
...
</div>
);
}
Работа с узлом DOM с помощью ref
Иногда вам нужно получить узел DOM браузера, связанный с тегом в JSX. Например, если вы хотите сфокусировать <input> при нажатии на кнопку, вам нужно вызвать focus() на узле DOM браузера <input>.
Чтобы получить узел DOM браузера для тега, объявите ref и передайте его в качестве атрибута ref этому тегу:
import { useRef } from 'react';
export default function Form() {
const inputRef = useRef(null);
// ...
return (
<input ref={inputRef} />
// ... React поместит узел DOM в inputRef.current после его отображения на экране.
import { useRef } from 'react'; export default function Form() { const inputRef = useRef(null); function handleClick() { inputRef.current.focus(); } return ( <> <input ref={inputRef} /> <button onClick={handleClick}> Focus the input </button> </> ); }
Подробнее о работе с DOM с помощью refs и более подробных примерах.
Для более сложных случаев, атрибут ref также принимает функцию-обработчик
const markup = { __html: '<p>some raw html</p>' };
return <div dangerouslySetInnerHTML={markup} />;.Опасное задание внутреннего HTML
Вы можете передать строку с исходным HTML элементу следующим образом:
const markup = { __html: '<p>some raw html</p>' };
return <div dangerouslySetInnerHTML={markup} />; Это опасно. Как и с базовым свойством DOM innerHTML, вы должны проявлять крайнюю осторожность! Если разметка получена из ненадежного источника, очень просто ввести уязвимость XSS таким образом.
Например, если вы используете библиотеку Markdown, которая преобразует Markdown в HTML, доверяете, что её парсер не содержит ошибок, а пользователь видит только свой ввод, вы можете отобразить полученный HTML следующим образом:
import { Remarkable } from 'remarkable'; const md = new Remarkable(); function renderMarkdownToHTML(markdown) { // This is ONLY safe because the output HTML // is shown to the same user, and because you // trust this Markdown parser to not have bugs. const renderedHTML = md.render(markdown); return {__html: renderedHTML}; } export default function MarkdownPreview({ markdown }) { const markup = renderMarkdownToHTML(markdown); return <div dangerouslySetInnerHTML={markup} />; }
Объект {__html} должен быть создан как можно ближе к месту генерации HTML, как показано в примере в функции renderMarkdownToHTML. Это гарантирует, что весь исходный HTML, используемый в вашем коде, явно помечен как таковой, и что передаются только переменные, которые, как ожидается, содержат HTML. Не рекомендуется создавать объект inline, как в <div dangerouslySetInnerHTML={{__html: markup}} />.
Чтобы понять, почему рендеринг произвольного HTML опасен, замените код выше следующим:
const post = {
// Imagine this content is stored in the database.
content: `<img src="" onerror='alert("you were hacked")'>`
};
export default function MarkdownPreview() {
// 🔴 SECURITY HOLE: passing untrusted input to dangerouslySetInnerHTML
const markup = { __html: post.content };
return <div dangerouslySetInnerHTML={markup} />;
} Вставленный в HTML код будет выполняться. Хакер может использовать эту брешь в безопасности, чтобы украсть информацию пользователя или выполнить действия от его имени. Используйте dangerouslySetInnerHTML только с надёжными и проверенными данными.
Обработка событий мыши
Этот пример демонстрирует некоторые распространенные события мыши и когда они срабатывают.
export default function MouseExample() { return ( <div onMouseEnter={e => console.log('onMouseEnter (parent)')} onMouseLeave={e => console.log('onMouseLeave (parent)')} > <button onClick={e => console.log('onClick (first button)')} onMouseDown={e => console.log('onMouseDown (first button)')} onMouseEnter={e => console.log('onMouseEnter (first button)')} onMouseLeave={e => console.log('onMouseLeave (first button)')} onMouseOver={e => console.log('onMouseOver (first button)')} onMouseUp={e => console.log('onMouseUp (first button)')} > First button </button> <button onClick={e => console.log('onClick (second button)')} onMouseDown={e => console.log('onMouseDown (second button)')} onMouseEnter={e => console.log('onMouseEnter (second button)')} onMouseLeave={e => console.log('onMouseLeave (second button)')} onMouseOver={e => console.log('onMouseOver (second button)')} onMouseUp={e => console.log('onMouseUp (second button)')} > Second button </button> </div> ); }
Обработка событий указателя
Этот пример демонстрирует некоторые распространённые события указателя и когда они срабатывают.
export default function PointerExample() { return ( <div onPointerEnter={e => console.log('onPointerEnter (parent)')} onPointerLeave={e => console.log('onPointerLeave (parent)')} style={{ padding: 20, backgroundColor: '#ddd' }} > <div onPointerDown={e => console.log('onPointerDown (first child)')} onPointerEnter={e => console.log('onPointerEnter (first child)')} onPointerLeave={e => console.log('onPointerLeave (first child)')} onPointerMove={e => console.log('onPointerMove (first child)')} onPointerUp={e => console.log('onPointerUp (first child)')} style={{ padding: 20, backgroundColor: 'lightyellow' }} > First child </div> <div onPointerDown={e => console.log('onPointerDown (second child)')} onPointerEnter={e => console.log('onPointerEnter (second child)')} onPointerLeave={e => console.log('onPointerLeave (second child)')} onPointerMove={e => console.log('onPointerMove (second child)')} onPointerUp={e => console.log('onPointerUp (second child)')} style={{ padding: 20, backgroundColor: 'lightblue' }} > Second child </div> </div> ); }
Обработка событий фокуса
В React события фокуса события фокуса распространяются. Вы можете использовать currentTarget и relatedTarget для различения, возникли ли события фокусировки или разфокусировки извне родительского элемента. Пример показывает, как обнаружить фокусировку дочернего элемента, фокусировку родительского элемента и как обнаружить вход или выход фокуса во всем поддереве.
export default function FocusExample() { return ( <div tabIndex={1} onFocus={(e) => { if (e.currentTarget === e.target) { console.log('focused parent'); } else { console.log('focused child', e.target.name); } if (!e.currentTarget.contains(e.relatedTarget)) { // Not triggered when swapping focus between children console.log('focus entered parent'); } }} onBlur={(e) => { if (e.currentTarget === e.target) { console.log('unfocused parent'); } else { console.log('unfocused child', e.target.name); } if (!e.currentTarget.contains(e.relatedTarget)) { // Not triggered when swapping focus between children console.log('focus left parent'); } }} > <label> First name: <input name="firstName" /> </label> <label> Last name: <input name="lastName" /> </label> </div> ); }
Обработка событий клавиатуры
Этот пример демонстрирует некоторые распространённые события клавиатуры и когда они срабатывают.
export default function KeyboardExample() { return ( <label> First name: <input name="firstName" onKeyDown={e => console.log('onKeyDown:', e.key, e.code)} onKeyUp={e => console.log('onKeyUp:', e.key, e.code)} /> </label> ); }
© 2013–present Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://18.react.dev/reference/react-dom/components/common