Общие компоненты (например, <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, или строка для legacy refs. Ваш 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) или состояния (state). -
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: Функция-обработчик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: A version ofonPointerDownthat fires in the фазе захвата. -
onPointerEnter: A обработчикPointerEventfunction. Срабатывает, когда указатель перемещается внутрь элемента. Не имеет фазы захвата. Вместо этогоonPointerLeaveиonPointerEnterраспространяются от элемента, из которого уходит указатель, к элементу, в который он входит. -
onPointerLeave: A обработчикPointerEventfunction. Срабатывает, когда указатель перемещается за пределы элемента. Не имеет фазы захвата. Вместо этогоonPointerLeaveиonPointerEnterраспространяются от элемента, из которого уходит указатель, к элементу, в который он входит. -
onPointerMove: A обработчикPointerEventfunction. Срабатывает, когда координаты указателя меняются. -
onPointerMoveCapture: A version ofonPointerMovethat fires in the фазе захвата. -
onPointerOut: A обработчикPointerEventfunction. Срабатывает, когда указатель перемещается за пределы элемента, если взаимодействие с указателем отменено и по ряду других причин. -
onPointerOutCapture: A version ofonPointerOutthat fires in the фазе захвата. -
onPointerUp: A обработчикPointerEventfunction. Срабатывает, когда указатель больше не активен. -
onPointerUpCapture: A version ofonPointerUpthat fires in the фазе захвата. -
onPaste: A обработчикClipboardEventfunction. Срабатывает, когда пользователь пытается вставить что-то из буфера обмена. -
onPasteCapture: A version ofonPastethat fires in the фазе захвата. -
onScroll: An обработчикEventfunction. Срабатывает, когда элемент был прокручен. Это событие не распространяется. -
onScrollCapture: A version ofonScrollthat fires in the фазе захвата. -
onSelect: An обработчикEventfunction. Срабатывает после изменения выделения внутри изменяемого элемента, например, input. React расширяет событиеonSelectдля работы и с элементамиcontentEditable={true}. Кроме того, React расширяет его, чтобы срабатывать при пустом выделении и при редактировании (что может повлиять на выделение). -
onSelectCapture: A version ofonSelectthat fires in the фазе захвата. -
onTouchCancel: A обработчикTouchEventfunction. Срабатывает, когда браузер отменяет взаимодействие с касанием. -
onTouchCancelCapture: A version ofonTouchCancelthat fires in the фазе захвата. -
onTouchEnd: A обработчикTouchEventfunction. Срабатывает, когда одна или несколько точек касания удалены. -
onTouchEndCapture: A version ofonTouchEndthat fires in the фазе захвата. -
onTouchMove: A обработчикTouchEventfunction. Срабатывает, когда одна или несколько точек касания перемещаются. -
onTouchMoveCapture: A version ofonTouchMovethat fires in the фазе захвата. -
onTouchStart: A обработчикTouchEventfunction. Срабатывает, когда одна или несколько точек касания помещаются. -
onTouchStartCapture: A version ofonTouchStartthat fires in the фазе захвата. -
onTransitionEnd: A обработчикTransitionEventfunction. Срабатывает при завершении CSS-перехода. -
onTransitionEndCapture: A version ofonTransitionEndthat fires in the фазе захвата. -
onWheel: A обработчикWheelEventfunction. Срабатывает, когда пользователь вращает колесо мыши. -
onWheelCapture: A version ofonWheelthat fires in the фазе захвата. -
role: A string. Определяет роль элемента для вспомогательных технологий. -
slot: A string. Определяет имя слота при использовании shadow DOM. В React эквивалентный паттерн обычно достигается путём передачи JSX как props, например<Layout left={<Sidebar />} right={<Content />} />. -
spellCheck: A boolean or null. Если явно установлено вtrueилиfalse, включает или отключает проверку правописания. -
tabIndex: A number. Переопределяет стандартное поведение клавиши Tab. Избегайте использования значений, отличных от-1и0. -
title: A string. Указывает текст всплывающей подсказки для элемента. -
translate: Either'yes'or'no'. Передача значения'no'исключает содержимое элемента из перевода.
Вы также можете передавать пользовательские атрибуты как props, например mycustomprop="someValue". Это может быть полезно при интеграции с сторонними библиотеками. Имя пользовательского атрибута должно быть в нижнем регистре и не должно начинаться с on. Значение будет преобразовано в строку. Если вы передадите null или undefined, пользовательский атрибут будет удалён.
Эти события срабатывают только для элементов <form>:
-
onReset: An обработчикEventfunction. Срабатывает, когда форма сбрасывается. -
onResetCapture: A version ofonResetthat fires in the фазе захвата. -
onSubmit: An обработчикEventfunction. Срабатывает, когда форма отправляется. -
onSubmitCapture: A version ofonSubmitthat fires in the фазе захвата.
Эти события срабатывают только для элементов <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('Attached', node);
return () => {
console.log('Clean up', node)
}
}}> См. пример использования функции обратного вызова ref.
Когда узел <div> DOM-дерева добавляется на экран, React вызовет вашу функцию обратного вызова ref с узлом DOM node в качестве аргумента. При удалении узла <div> DOM-дерева React вызовет функцию очистки, возвращённую функцией обратного вызова.
React также вызовет вашу функцию обратного вызова ref всякий раз, когда вы передадите другую функцию обратного вызова ref. В приведенном выше примере (node) => { ... } — это другая функция на каждом рендере. При повторном рендере компонента React вызовет предыдущую функцию с null в качестве аргумента, а следующую — с узлом DOM.
Параметры
-
node: узел DOM. React передаст вам узел DOM, когда ref будет прикреплён. Если вы не передаёте ту же ссылку на функцию для функции обратного вызоваrefна каждом рендере, функция обратного вызова будет временно очищаться и пересоздаваться при каждом повторном рендере компонента.
Примечание
React 19 добавил функции очистки для функций обратного вызова ref .
Для обеспечения обратной совместимости, если функция очистки не возвращается функцией обратного вызова ref, то node будет вызвана с null при отсоединении ref. Это поведение будет удалено в будущих версиях.
Возвращаемое значение
-
необязательно
cleanup function: Когдаrefотсоединяется, React вызовет функцию очистки. Если функция не возвращается функцией обратного вызоваref, React снова вызовет функцию обратного вызоваnullсrefв качестве аргумента при отсоединенииref. Это поведение будет удалено в будущих версиях.
Ограничения
- При включённом режиме строгости React выполнит один дополнительный цикл настройки + очистки только для разработки перед первой реальной настройкой. Это тест на прочность, который гарантирует, что ваша логика очистки «отражает» вашу логику настройки и что она останавливает или отменяет то, что делает настройка. Если это вызывает проблему, реализуйте функцию очистки.
- При передаче другой функции обратного вызова
ref, React вызовет функцию очистки предыдущей функции обратного вызова, если она предоставлена. Если функция очистки не определена, функция обратного вызоваrefбудет вызвана сnullв качестве аргумента. Следующая функция будет вызвана с узлом DOM.
Объект события React
Обработчики событий получат объект события React. Иногда он также называется «синтетическим событием».
<button onClick={e => {
console.log(e); // React event object
}} /> Он соответствует тому же стандарту, что и базовые события DOM, но исправляет некоторые несоответствия между браузерами.
Некоторые события React не отображаются напрямую в родных событиях браузера. Например, в onMouseLeave, e.nativeEvent будет указывать на событие mouseout . Конкретное отображение не является частью публичного API и может быть изменено в будущем. Если вам по какой-либо причине нужен базовый браузерный event, прочитайте его из 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(базовый тип).
Функция обработки события анимации
Тип обработчика событий для событий анимации CSS анимации.
<div
onAnimationStart={e => console.log('onAnimationStart')}
onAnimationIteration={e => console.log('onAnimationIteration')}
onAnimationEnd={e => console.log('onAnimationEnd')}
/> Параметры
-
e: Объект события React React событие с этими дополнительными свойствамиAnimationEvent:
Функция обработки событий буфера обмена
Тип обработчика событий для событий Clipboard API.
<input
onCopy={e => console.log('onCopy')}
onCut={e => console.log('onCut')}
onPaste={e => console.log('onPaste')}
/> Параметры
-
e: Объект события React React событие с дополнительными свойствамиClipboardEvent:
Функция обработки событий ввода
Тип обработчика событий для событий input method editor (IME).
<input
onCompositionStart={e => console.log('onCompositionStart')}
onCompositionUpdate={e => console.log('onCompositionUpdate')}
onCompositionEnd={e => console.log('onCompositionEnd')}
/> Параметры
-
e: Объект события React React событие с дополнительными свойствамиCompositionEvent:
Функция обработки событий перетаскивания
Тип обработчика событий для событий HTML Drag and Drop API.
<>
<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
Также содержит унаследованные свойства
UIEvent:
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:Также содержит унаследованные свойства
MouseEvent:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
Также содержит унаследованные свойства
UIEvent:
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 с этими дополнительнымиTouchEventсвойствами:Он также включает унаследованные
UIEventсвойства:
TransitionEvent обработчик функции
Тип обработчика событий для событий перехода CSS.
<div
onTransitionEnd={e => console.log('onTransitionEnd')}
/> Параметры
-
e: Объект события 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 также принимает функцию обратного вызова callback function.
Опасно устанавливать inner 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, используемый в вашем коде, явно помечен как таковой, и что в dangerouslySetInnerHTML передаются только переменные, которые, по вашему ожиданию, содержат HTML. Не рекомендуется создавать объект в строке, как <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://react.dev/reference/react-dom/components/common