Загальні компоненти (наприклад, <div>)

Всі вбудовані компоненти браузера, такі як <div>, підтримують деякі поширені пропси та події.


Довідник

Загальні компоненти (наприклад, <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 буде заповнено елементом DOM для цього вузла. Детальніше про маніпуляції з DOM за допомогою рефів.

  • suppressContentEditableWarning: Логічний вираз. Якщо true, пригнічує попередження, яке React показує для елементів, що мають children і contentEditable={true} (які зазвичай не працюють разом). Використовуйте його, якщо ви збираєте бібліотеку текстового введення, яка керує вмістом contentEditable вручну.

  • suppressHydrationWarning: Логічний вираз. Якщо ви використовуєте серверний рендеринг, зазвичай з'являється попередження, коли сервер і клієнт рендерять різний вміст. У деяких рідкісних випадках (наприклад, мітки часу) гарантувати точну відповідність дуже важко або неможливо. Якщо ви встановите для suppressHydrationWarning значення true, React не буде попереджати вас про невідповідності в атрибутах і вмісті цього елемента. Він працює лише на один рівень вглиб і призначений для використання як аварійний люк. Не зловживайте ним. Почитайте про придушення помилок гідратації.

  • стиль: Об'єкт зі стилями CSS, наприклад { fontWeight: 'bold', margin: 20 }. Подібно до властивості DOM style, назви властивостей CSS слід записувати як camelCase, наприклад fontWeight замість font-weight. Ви можете передавати рядки або числа як значення. Якщо ви передаєте число, наприклад width: 100, React автоматично додасть px ("пікселі") до значення, якщо це не властивість unitless. Ми рекомендуємо використовувати style тільки для динамічних стилів, де ви не знаєте значення стилю наперед. В інших випадках ефективнішим буде застосування звичайних класів CSS з className. Детальніше про className та стиль.

Ці стандартні 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 вони не дуже часто використовуються, оскільки ви зазвичай читаєте дані з пропсів або стану.
  • dir: Або 'ltr' або 'rtl'. Вказує напрямок тексту елемента.
  • draggable: Булеве значення. Визначає, чи можна перетягувати елемент. Частина HTML Drag and Drop API.
  • enterKeyHint: Рядок. Вказує, яку дію призначити для клавіші вводу на віртуальних клавіатурах.
  • .
  • htmlFor: Рядок. Для <label> та <output> дозволяє пов'язати мітку з деяким елементом керування. Те саме, що і для атрибута 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 bubbles.
  • 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 event.
  • 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 bubbles.
  • 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, яка спрацьовує у фазі захоплення.
  • role: Рядок. Вказує роль елемента явно для допоміжних технологій.
  • slot: Рядок. Вказує ім'я слоту при використанні тіньового DOM. У React еквівалентний шаблон зазвичай досягається передачею JSX в якості пропсів, наприклад, <Layout left={<Sidebar />} right={<Content />} />.
  • .
  • spellCheck: Логічне значення або нуль. Якщо явно встановлено у true або false, вмикає або вимикає перевірку правопису.
  • tabIndex: Число. Перевизначає поведінку кнопки Tab за замовчуванням. Уникати використання значень, відмінних від -1 і 0.
  • title: Рядок. Вказує текст підказки для елемента.
  • перекласти : Або '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, яка спрацьовує у фазі захоплення.

Застереження

  • Неможливо передати одночасно дітям та dangerouslySetInnerHTML.
  • Деякі події (наприклад, onAbort та onLoad) не відображаються у браузері, але відображаються у React.

посилання на функцію зворотного виклику

Замість об'єкта ref (як той, що повертається useRef) ви можете передати функцію до атрибуту ref.

<div ref={(node) => console.log(node)} />

Дивіться приклад використання refcallback.

Коли DOM-вузол <div> буде додано на екран, React викличе ваш зворотній виклик ref з DOM-вузлом node як аргумент. Коли цей вузол <div> DOM буде видалено, React викличе ваш зворотній виклик ref з null.

React також викликатиме ваш зворотний виклик ref щоразу, коли ви передаєте зворотний виклик different ref. У наведеному вище прикладі (node) => { ... } - це інша функція для кожного рендерингу. При повторному рендерингу вашого компонента функція previous буде викликана з null в якості аргументу, а функція next буде викликана з вузлом DOM.

Параметри

  • вузол: Вузол DOM або null. React передасть вам вузол DOM, коли посилання буде приєднано, і null, коли посилання буде від'єднано. Якщо ви не передасте однакове посилання на функцію для зворотного виклику ref при кожному рендері, зворотний виклик буде тимчасово від'єднуватися і знову приєднуватися під час кожного повторного рендерингу компонента.

Повернення

Не повертати нічого зі зворотного виклику ref.


Об'єкт події 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: A DOM Event. Оригінальний об'єкт події браузера.
  • .

Методи

Об'єкти подій 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')}
/>

Параметр


ClipboardEvent функція-обробник

Тип обробника подій для подій Clipboard API.

<input
  onCopy={e => console.log('onCopy')}
  onCut={e => console.log('onCut')}
  onPaste={e => console.log('onPaste')}
/>

Параметри


CompositionEvent функція-обробник

Тип обробника подій для подій редактора методів вводу (IME).

<input
  onCompositionStart={e => console.log('onCompositionStart')}
  onCompositionUpdate={e => console.log('onCompositionUpdate')}
  onCompositionEnd={e => console.log('onCompositionEnd')}
/>

Параметри


DragEvent функція-обробник

Тип обробника подій для подій 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>
</>

Параметри


FocusEvent функція-обробник

Тип обробника подій для подій фокусу.

<input
  onFocus={e => console.log('onFocus')}
  onBlur={e => console.log('onBlur')}
/>

Дивіться приклад.

Параметри


Event функція-обробник

Тип обробника подій для типових подій.

Параметри

  • e: Об'єкт події React без додаткових властивостей.

InputEvent функція-обробник

Тип обробника події для події onBeforeInput.

<input onBeforeInput={e => console.log('onBeforeInput')} />

Параметри

  • e: Об'єкт події React з такими додатковими InputEvent властивостями:

KeyboardEvent функція-обробник

Тип обробника подій для подій клавіатури.

<input
  onKeyDown={e => console.log('onKeyDown')}
  onKeyUp={e => console.log('onKeyUp')}
/>

Дивіться приклад.

Параметри


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')}
/>

Дивіться приклад.

Параметри


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')}
/>

Дивіться приклад.

Параметри


TouchEvent функція-обробник

Тип обробника подій для подій дотику.

<div
  onTouchStart={e => console.log('onTouchStart')}
  onTouchMove={e => console.log('onTouchMove')}
  onTouchEnd={e => console.log('onTouchEnd')}
  onTouchCancel={e => console.log('onTouchCancel')}
/>

Параметри


TransitionEvent функція-обробник

Тип обробника подій для подій переходу CSS.

<div
  onTransitionEnd={e => console.log('onTransitionEnd')}
/>

Параметри


UIEvent функція-обробник

Тип обробника подій для типових подій інтерфейсу

<div
  onScroll={e => console.log('onScroll')}
/>

Параметри

  • e: Об'єкт події React з такими додатковими UIEvent властивостями:

WheelEvent функція-обробник

Тип обробника події для події onWheel.

<div
  onWheel={e => console.log('onWheel')}
/>

Параметри


Використання

Застосування стилів 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.

import Avatar from './Avatar.js';

const user = {
  name: 'Hedy Lamarr',
  imageUrl: 'https://i.imgur.com/yXOvdOSs.jpg',
  imageSize: 90,
};

export default function App() {
  return <Avatar user={user} />;
}
export default function Avatar({ user }) {
  return (
    <img
      src={user.imageUrl}
      alt={'Photo of ' + user.name}
      className="avatar"
      style={{
        width: user.imageSize,
        height: user.imageSize
      }}
    />
  );
}
.avatar {
  border-radius: 50%;
}

Як умовно застосувати кілька класів CSS?

Щоб умовно застосувати класи CSS, вам потрібно самостійно створити рядок className за допомогою JavaScript.

Наприклад, className={'row ' + (isSelected ? 'selected': '')} видасть або className="row" або className="row selected" залежно від того, чи isSelected є істинним .

Щоб зробити це більш читабельним, ви можете використати крихітну допоміжну бібліотеку на зразок 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 за допомогою посилання

Іноді вам потрібно зв'язати 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 за допомогою посилань та подивіться більше прикладів.

Для більш складних випадків використання атрибут ref також приймає функцію зворотного виклику.


Небезпечне налаштування внутрішнього HTML

Ви можете передати елементу необроблений HTML-рядок, наприклад, так:

const markup = { __html: '<p>some raw html</p>' };
return <div dangerouslySetInnerHTML={markup} />;

Це небезпечно. Як і з базовою властивістю DOM innerHTML, ви повинні бути дуже обережними! Якщо розмітка не надходить з повністю надійного джерела, то таким чином дуже просто впровадити XSSвразливість.

Наприклад, якщо ви використовуєте бібліотеку Markdown, яка конвертує Markdown в HTML, довіряєте, що її парсер не містить помилок, а користувач бачить лише власне введення, ви можете відобразити отриманий HTML так:

import { useState } from 'react';
import MarkdownPreview from './MarkdownPreview.js';

export default function MarkdownEditor() {
  const [postContent, setPostContent] = useState('_Hello,_ **Markdown**!');
  return (
    <>
      <label>
        Enter some markdown:
        <textarea
          value={postContent}
          onChange={e => setPostContent(e.target.value)}
        />
      </label>
      <hr />
      <MarkdownPreview markdown={postContent} />
    </>
  );
}
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} />;
}
{
  "dependencies": {
    "react": "latest",
    "react-dom": "latest",
    "react-scripts": "latest",
    "remarkable": "2.0.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}
textarea { display: block; margin-top: 5px; margin-bottom: 10px; }

Об'єкт {__html} слід створювати якомога ближче до місця генерації HTML, як у наведеному вище прикладі у функції renderMarkdownToHTML. Це гарантує, що весь необроблений HTML, який використовується у вашому коді, буде явно позначено як такий, і що до dangerouslySetInnerHTML будуть передані лише ті змінні, які, як ви очікуєте, міститимуть HTML. Не рекомендується створювати об'єкт у рядку на зразок <div dangerouslySetInnerHTML={{__html: markup}} />.

Щоб побачити, чому рендеринг довільного HTML є небезпечним, замініть наведений вище код на такий:

Вбудований в 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>
  );
}
label { display: block; }
input { margin-left: 10px; }

Обробка подій вказівника

У цьому прикладі показано деякі типові події вказівника та коли вони спрацьовують.

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>
  );
}
label { display: block; }
input { margin-left: 10px; }

Обробка подій фокусування

У 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>
  );
}
label { display: block; }
input { margin-left: 10px; }

Обробка подій клавіатури

У цьому прикладі показано деякі типові події клавіатури та коли вони спрацьовують.

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>
  );
}
label { display: block; }
input { margin-left: 10px; }