<img>¶
Встроенный компонент браузера <img> позволяет встроить изображение.
1 | |
Описание¶
<img>¶
Чтобы показать изображение, отрендерите встроенный компонент браузера <img>.
1 | |
Пропсы¶
<img> поддерживает все общие пропсы элементов.
alt: строка. Задаёт альтернативный текст изображения. Для чисто декоративного изображения используйте пустую строку.crossOrigin: строка. Задаёт политику CORS, которую нужно использовать при загрузке изображения. Возможные значения:anonymousиuse-credentials.decoding: строка. Подсказывает, должен ли браузер дождаться декодирования изображения, прежде чем показывать остальное содержимое. Возможные значения:async,syncиauto(по умолчанию).fetchPriority: строка. Предлагает относительный приоритет загрузки изображения. Возможные значения:high,lowиauto(по умолчанию). Во время серверного рендерингаfetchPriority="low"также не даёт React автоматически предварительно загружать изображение.height: число или строка. Задаёт отображаемую высоту изображения.loading: строка. Указывает, должен ли браузер отложить загрузку изображения, пока оно не окажется рядом с областью просмотра. Возможные значения:eager(по умолчанию) иlazy. Значениеloading="lazy"не даёт React автоматически предварительно загружать изображение.onError: функция-обработчик события. Срабатывает, когда изображение не загрузилось.onLoad: функция-обработчик события. Срабатывает, когда изображение закончило загружаться. ПередачаonLoadне даёт React ждать изображение во время клиентского обновления View Transition.referrerPolicy: строка. Задаёт информацию о реферере, которую нужно отправлять при загрузке изображения.sizes: строка. Задаёт размеры изображения для разных раскладок страницы. Используется вместе сsrcSet.src: строка. Задаёт URL изображения.srcSet: строка. Задаёт один или несколько вариантов источника изображения, из которых браузер может выбрать.useMap: строка. Связывает изображение с клиентской картой изображения.width: число или строка. Задаёт отображаемую ширину изображения.
Предупреждения¶
- Не передавайте в
srcпустую строку. Из-за этого браузер может снова запросить текущую страницу. В режиме разработки React предупреждает и опускает атрибут. Чтобы не рендерить изображение, не выводите<img>или передайте вsrcзначениеnull. <img>не может иметь дочерние элементы и не может использоватьdangerouslySetInnerHTML. React выбросит ошибку, если передать то или другое.fetchPriority="low"не мешает React ждать загрузки и декодирования изображения во время клиентского обновления View Transition. Чтобы отказаться от этого поведения, используйтеloading="lazy"или обработчикonLoad.
Использование¶
Отображение изображения¶
Передайте URL изображения в src и текстовое описание в alt:
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 | |
Укажите width и height, если знаете размеры изображения, чтобы браузер зарезервировал место до его загрузки. Для декоративного изображения передайте alt="", чтобы программы чтения с экрана его проигнорировали.
Управление предварительной загрузкой изображения во время серверного рендеринга¶
Во время серверного рендеринга React по умолчанию автоматически создаёт подсказку предварительной загрузки для <img>. Благодаря этому браузер может начать загрузку изображения до того, как встретит <img> в отрендеренном HTML.
Добавьте loading="lazy" или fetchPriority="low" изображению, которое не должно получать эту подсказку:
1 2 3 4 5 6 7 8 9 | |
В этом примере React создаёт подсказку предварительной загрузки только для hero.jpg. В зависимости от серверного API или фреймворка React может отрендерить эквивалент такого элемента:
1 | |
React может вместо этого передать ту же подсказку в заголовке ответа Link. У двух других изображений пропсы loading и fetchPriority сохраняются в отрендеренном HTML, но React не создаёт для них подсказки предварительной загрузки. Проп loading="lazy" просит браузер отложить загрузку изображения, пока оно не приблизится к области просмотра. Проп fetchPriority="low" позволяет загрузить изображение сразу, но говорит браузеру получать его с меньшим приоритетом.
React также не создаёт автоматическую предварительную загрузку, если изображение находится внутри элемента <picture> или <noscript> либо если его src или srcSet — это data URL.
Если вы рендерите изображение через фреймворк или библиотеку компонентов, смотрите в её документации поведение по умолчанию. React решает, создавать ли автоматическую предварительную загрузку, по пропсам нижележащего <img>. Например, компонент изображения может по умолчанию добавлять loading="lazy" и давать отдельную опцию, чтобы явно предварительно загружать выбранные изображения.
Чтобы создать явную подсказку предварительной загрузки, вызовите preload.
Ожидание изображения во время View Transition¶
Во время клиентского обновления <ViewTransition> React может дождаться загрузки и декодирования изображения, прежде чем начать анимацию. Это происходит, когда рендерится новый <img> с непустым src или когда у существующего изображения меняется src или srcSet. Изображение должно находиться внутри поддерева <ViewTransition> и не должно иметь loading="lazy" или обработчик onLoad. Во время синхронных обновлений React не ждёт изображения.
Когда граница Suspense раскрывает потоковое содержимое внутри <ViewTransition>, React также может ждать видимые изображения с непустым src, у которых нет loading="lazy". React перестаёт ждать после таймаута, чтобы медленное изображение не блокировало обновление бесконечно.
В этом примере граница Suspense обёрнута в <ViewTransition> и показывает скелетон профиля, пока портрет не загрузится.
Для сравнения вторая кнопка вставляет ту же карточку прямо в DOM. Карточка появляется сразу, а браузер показывает изображение после загрузки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
1 2 3 4 5 6 7 | |
Источник — https://react.dev/reference/react-dom/components/img