<link>
Встроенный компонент браузера <link> позволяет использовать внешние ресурсы, например таблицы стилей, или добавлять в документ метаданные ссылок.
<link rel="icon" href="favicon.ico" />
Справочник
<link>
Чтобы ссылаться на внешние ресурсы, например таблицы стилей, шрифты и значки, или добавлять в документ метаданные ссылок, отобразите встроенный компонент браузера <link>. Отобразить <link> можно из любого компонента, и React в большинстве случаев разместит соответствующий элемент DOM в заголовке документа.
<link rel="icon" href="favicon.ico" /> Ниже приведены дополнительные примеры.
Свойства
<link> поддерживает все общие свойства элементов.
-
rel: строка, обязательное свойство. Указывает тип связи с ресурсом. React обрабатывает ссылки сrel="stylesheet"иначе, чем другие ссылки.
Эти свойства применяются, когда rel="stylesheet":
-
precedence: строка. Указывает React, где расположить узел DOM<link>относительно других узлов в документе<head>, определяя, какая таблица стилей может переопределить другую. React определяет, что обнаруженные первыми значения приоритета являются «низшими», а обнаруженные позже — «высшими». Многие системы стилей могут обходиться одним значением приоритета, поскольку правила стилей атомарны. Таблицы стилей с одинаковым приоритетом объединяются независимо от того, представлены ли они как<link>или встроенные теги<style>либо загружены с помощью функцийpreinit. -
media: строка. Ограничивает действие таблицы стилей определенным медиазапросом. -
title: строка. Указывает имя альтернативной таблицы стилей.
Эти свойства применяются, когда rel="stylesheet", но отключают специальную обработку таблиц стилей в React:
-
disabled: логическое значение. Отключает таблицу стилей. -
onError: функция. Вызывается, если не удалось загрузить таблицу стилей. -
onLoad: функция. Вызывается после завершения загрузки таблицы стилей.
Эти свойства применяются, когда rel="preload" или rel="modulepreload":
-
as: строка. Тип ресурса. Возможные значения:audio,document,embed,fetch,font,image,object,script,style,track,video,worker. -
imageSrcSet: строка. Применяется только приas="image". Указывает набор источников изображения. -
imageSizes: строка. Применяется только приas="image". Указывает размеры изображения.
Эти свойства применяются, когда rel="icon" или rel="apple-touch-icon":
-
sizes: строка. Размеры значка.
Эти свойства применяются во всех случаях:
-
href: строка. URL связанного ресурса. -
crossOrigin: строка. Используемая политика CORS. Возможные значения:anonymousиuse-credentials. Это свойство обязательно, еслиasимеет значение"fetch". -
referrerPolicy: строка. Заголовок Referrer, отправляемый при загрузке. Возможные значения:no-referrer-when-downgrade(по умолчанию),no-referrer,origin,origin-when-cross-originиunsafe-url. -
fetchPriority: строка. Задает относительный приоритет загрузки ресурса. Возможные значения:auto(по умолчанию),highиlow. -
hrefLang: строка. Язык связанного ресурса. -
integrity: строка. Криптографический хеш ресурса, позволяющий проверить его подлинность. -
type: строка. MIME-тип связанного ресурса.
Свойства, не рекомендуемые к использованию с React:
-
blocking: строка. Если задано значение"render", указывает браузеру не отображать страницу, пока не будет загружена таблица стилей. React обеспечивает более точный контроль с помощью Suspense.
Особенности отображения
React всегда размещает соответствующий компоненту <link> элемент DOM в <head> документа независимо от того, в каком месте дерева React он отображается. <head> — единственное допустимое место для существования <link> в DOM, однако компоненту, представляющему отдельную страницу, удобно и полезно с точки зрения композиции самостоятельно отображать компоненты <link>.
Есть несколько исключений:
- Если у
<link>есть свойствоrel="stylesheet", для применения этого особого поведения также необходимо указать свойствоprecedence. Порядок таблиц стилей в документе имеет значение, поэтому React должен знать, как расположить эту таблицу стилей относительно других. Это задается с помощью свойстваprecedence. Если свойствоprecedenceне указано, особое поведение не применяется. - Если у
<link>есть свойствоitemProp, особое поведение не применяется, поскольку в этом случае оно относится не ко всему документу, а к метаданным определенной его части. - Если у
<link>есть свойствоonLoadилиonError, поскольку в этом случае вы вручную управляете загрузкой связанного ресурса внутри компонента React.
Особая обработка таблиц стилей
Кроме того, если <link> ведет к таблице стилей (то есть в его свойствах указано rel="stylesheet"), React обрабатывает его особым образом:
- Компонент, отображающий
<link>, будет приостановлен на время загрузки таблицы стилей. - Если несколько компонентов отображают ссылки на одну и ту же таблицу стилей, React удалит дубликаты и добавит в DOM только одну ссылку. Две ссылки считаются одинаковыми, если у них совпадает свойство
href.
Есть два исключения из этого особого поведения:
- Если у ссылки нет свойства
precedence, особое поведение не применяется. Порядок таблиц стилей в документе имеет значение, поэтому React должен знать, как расположить эту таблицу относительно других; это задается с помощью свойстваprecedence. - Если указано любое из свойств
onLoad,onErrorилиdisabled, особое поведение не применяется, поскольку эти свойства означают, что вы вручную управляете загрузкой таблицы стилей внутри своего компонента.
У такой особой обработки есть два нюанса:
- React будет игнорировать изменения свойств после отображения ссылки. (Если это произойдет, React выдаст предупреждение в режиме разработки.)
- React может оставить ссылку в DOM даже после размонтирования отобразившего ее компонента.
Использование
Ссылки на связанные ресурсы
С помощью ссылок можно добавить в документ сведения о связанных ресурсах, например значке, каноническом URL или pingback. React разместит эти метаданные в <head> документа независимо от того, в каком месте дерева React они отображаются.
import ShowRenderedHTML from './ShowRenderedHTML.js'; export default function BlogPage() { return ( <ShowRenderedHTML> <link rel="icon" href="favicon.ico" /> <link rel="pingback" href="http://www.example.com/xmlrpc.php" /> <h1>My Blog</h1> <p>...</p> </ShowRenderedHTML> ); }
Ссылка на таблицу стилей
Если для правильного отображения компонента требуется определенная таблица стилей, можно добавить ссылку на нее в компонент. Компонент будет приостановлен на время загрузки таблицы стилей. Необходимо указать свойство precedence, которое сообщает React, где разместить эту таблицу стилей относительно других: таблицы с более высоким приоритетом могут переопределять таблицы с более низким приоритетом.
Примечание
Если вы собираетесь использовать таблицу стилей, может быть полезно вызвать функцию preinit. Это может позволить браузеру начать загрузку таблицы стилей раньше, чем при простом отображении компонента <link>, например, отправив ответ HTTP Early Hints.
import ShowRenderedHTML from './ShowRenderedHTML.js'; export default function SiteMapPage() { return ( <ShowRenderedHTML> <link rel="stylesheet" href="sitemap.css" precedence="medium" /> <p>...</p> </ShowRenderedHTML> ); }
Управление приоритетом таблиц стилей
Таблицы стилей могут конфликтовать друг с другом; в таком случае браузер применяет ту, которая расположена позже в документе. React позволяет управлять порядком таблиц стилей с помощью свойства precedence. В этом примере три компонента отображают таблицы стилей, а таблицы с одинаковым приоритетом группируются в <head>.
import ShowRenderedHTML from './ShowRenderedHTML.js'; export default function HomePage() { return ( <ShowRenderedHTML> <FirstComponent /> <SecondComponent /> <ThirdComponent/> ... </ShowRenderedHTML> ); } function FirstComponent() { return <link rel="stylesheet" href="first.css" precedence="first" />; } function SecondComponent() { return <link rel="stylesheet" href="second.css" precedence="second" />; } function ThirdComponent() { return <link rel="stylesheet" href="third.css" precedence="first" />; }
Обратите внимание: сами значения precedence произвольны, и их названия вы выбираете самостоятельно. React определяет, что обнаруженные первыми значения приоритета являются «низшими», а обнаруженные позже — «высшими».
Дедупликация при отображении таблиц стилей
Если несколько компонентов отображают одну и ту же таблицу стилей, React добавит в заголовок документа только один <link>.
import ShowRenderedHTML from './ShowRenderedHTML.js'; export default function HomePage() { return ( <ShowRenderedHTML> <Component /> <Component /> ... </ShowRenderedHTML> ); } function Component() { return <link rel="stylesheet" href="styles.css" precedence="medium" />; }
Добавление ссылок к отдельным элементам документа
Компонент <link> можно использовать со свойством itemProp, чтобы добавлять к отдельным элементам документа ссылки на связанные ресурсы. В этом случае React не разместит эти аннотации в <head> документа, а отобразит их как любые другие компоненты React.
<section itemScope>
<h3>Annotating specific items</h3>
<link itemProp="author" href="http://example.com/" />
<p>...</p>
</section>
© 2013–present Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://react.dev/reference/react-dom/components/link