Le composant natif <link>
du navigateur vous permet dâutiliser des ressources externes telles que des feuilles de styles, ou dâannoter le document avec des mĂ©tadonnĂ©es de type lien.
<link rel="icon" href="favicon.ico" />
Référence
<link>
Pour établir un lien vers des ressources externes telles que des feuilles de styles, fontes et icÎnes, ou pour annoter le document avec des métadonnées de type lien, utilisez le composant natif <link>
du navigateur. Vous pouvez utiliser <link>
depuis nâimporte quel composant et React, la plupart du temps, placera lâĂ©lĂ©ment DOM correspondant dans lâen-tĂȘte (head
) du document.
<link rel="icon" href="favicon.ico" />
Voir dâautres exemples plus bas.
Props
<link>
prend en charge toutes les props communes aux éléments.
rel
: une chaßne de caractÚres obligatoire. Spécifie la relation à la ressource. React traite les liens avecrel="stylesheet"
différemment des autres liens.
Ces props sont disponibles lorsque rel="stylesheet"
:
precedence
: une chaĂźne de caractĂšres. Indique Ă React oĂč placer le nĆud DOM<link>
par rapport aux autres présents dans le<head>
du document, ce qui dĂ©termine quelle feuille de styles a prioritĂ© sur quelle autre. React dĂ©duira que les valeurs de prĂ©cĂ©dence quâil rencontre en premier sont « plus faibles » et que celles quâil rencontre plus tard sont « plus fortes ». De nombreux systĂšmes de gestion de styles fonctionneront trĂšs bien avec une unique valeur de prĂ©cĂ©dence, parce que les rĂšgles de styles y sont atomiques. Les feuilles de style de mĂȘme prĂ©cĂ©dence sont regroupĂ©es, quâil sâagisse de balises<link>
ou<style>
, y compris si elles sont chargées via la fonctionpreinit
.media
: une chaßne de caractÚres. Restreint la feuille de styles à une media query spécifique.title
: une chaĂźne de caractĂšres. Indique le nom dâune feuille de styles alternative.
Ces props sont disponibles lorsque rel="stylesheet"
mais elles désactivent le traitement spécial des feuilles de style par React :
disabled
: un booléen. Désactive la feuille de styles.onError
: une fonction. Appelée lorsque le chargement de la feuille de styles échoue.onLoad
: une fonction. Appelée lorsque le chargement de la feuille de styles est terminé.
Ces props sont disponibles lorsque rel="preload"
ou rel="modulepreload"
:
as
: une chaĂźne de caractĂšres. Indique le type de ressource. Les valeurs possibles sontaudio
,document
,embed
,fetch
,font
,image
,object
,script
,style
,track
,video
ouworker
.imageSrcSet
: une chaĂźne de caractĂšres, utilisable uniquement lorsqueas="image"
. Indique le jeu de sources de lâimage.imageSizes
: une chaĂźne de caractĂšres, utilisable uniquement lorsqueas="image"
. Indique le jeu de tailles de lâimage.
Ces props sont disponibles lorsque rel="icon"
ou rel="apple-touch-icon"
:
sizes
: une chaĂźne de caractĂšres. Les tailles de lâicĂŽne.
Ces props sont disponibles dans tous les cas :
href
: une chaĂźne de caractĂšres. LâURL de la ressource liĂ©e.crossOrigin
: une chaĂźne de caractĂšres. La politique CORS Ă utiliser. Les valeurs possibles sontanonymous
etuse-credentials
. Elle est obligatoire lorsqueas
vaut"fetch"
.referrerPolicy
: une chaĂźne de caractĂšres. Lâen-tĂȘte Referrer Ă envoyer lors du chargement. Les valeurs possibles sontno-referrer-when-downgrade
(par défaut),no-referrer
,origin
,origin-when-cross-origin
ouunsafe-url
.fetchPriority
: une chaßne de caractÚres. SuggÚre une priorité relative pour le chargement de la ressource. Les valeurs possibles sontauto
(par défaut),high
oulow
.hrefLang
: une chaßne de caractÚres. La langue de la ressource liée.integrity
: une chaßne de caractÚres. Une empreinte cryptographique de la ressource afin de vérifier son authenticité.type
: une chaßne de caractÚres. Le type MIME de la ressource liée.
Ces props sont déconseillées pour une utilisation avec React :
blocking
: une chaĂźne de caractĂšres. Si elle vaut"render"
, le navigateur attendra pour afficher la page que la feuille de styles ait fini son chargement. React permet un contrĂŽle plus granulaire grĂące Ă Suspense.
Comportement spécifique de rendu
React placera toujours lâĂ©lĂ©ment DOM correspondant au composant <link>
dans le <head>
du document, peu importe oĂč il figure dans lâarborescence React. Le <head>
est le seul endroit valide pour un <link>
dans le DOM, mais il est plus confortable, et prĂ©fĂ©rable en termes de composition, quâun composant reprĂ©sentant une page donnĂ©e puisse produire les composants <link>
lui-mĂȘme.
Il y a toutefois quelques exceptions :
- Si le
<link>
a une proprel="stylesheet"
, il doit Ă©galement disposer dâune propprecedence
pour bĂ©nĂ©ficier de ce traitement. Câest parce que lâordre des feuilles de style dans un document nâest pas anodin, de sorte que React a besoin de savoir oĂč placer la feuille de styles par rapport aux autres, ce que vous lui indiquez avec la propprecedence
. Si la propprecedence
est manquante, le composant ne sera pas injecté dans le<head>
.
- Si le
<link>
a une propitemProp
, aucun comportement spĂ©cifique nâest mis en place, parce que dans un tel cas le lien ne sâapplique pas au document, il fournit au contraire des mĂ©tadonnĂ©es sur lâemplacement spĂ©cifique de la page oĂč il figure. - Si le
<link>
a une proponLoad
ouonError
, le comportement est là aussi absent puisque vous gérez manuellement le chargement de la ressource liée au sein de votre composant React.
Comportement spécifique aux feuilles de styles
Qui plus est, si le <link>
est une feuille de styles (en dâautres termes, ses props comportent rel="stylesheet"
), React ajoutera le comportement spécifique que voici :
- Le composant qui utilise
<link>
suspendra pendant le chargement de la feuille de styles. - Si plusieurs composants produisent des liens vers la mĂȘme feuille de styles, React les dĂ©doublonnera et ne placera quâun lien dans le DOM. Deux liens sont considĂ©rĂ©s identiques sâils ont la mĂȘme valeur de prop
href
.
Ce comportement connaĂźt toutefois deux exceptions :
- Si le lien nâa pas de prop
precedence
, aucun comportement spĂ©cifique nâest fourni, parce que lâordre des feuilles de styles dans un document nâest pas anodin, de sorte que React a besoin de savoir oĂč placer la feuille de style par rapport aux autres, ce que vous lui indiquez avec la propprecedence
. - Si vous fournissez une prop
onLoad
,onError
oudisabled
, le comportement est là aussi absent puisque vous gérez manuellement le chargement de la ressource liée au sein de votre composant React.
Pour finir, ce comportement a deux limitations :
- React ignorera les changements à ces props aprÚs le rendu du lien. (React produira un avertissement en développement si ce cas survient.)
- React est susceptible de laisser le lien dans le DOM mĂȘme aprĂšs le dĂ©montage du composant qui lâa produit.
Utilisation
Lier des ressources associées
Vous pouvez annoter le document avec des liens vers ressources associĂ©es telles quâun icĂŽne, une URL canonique ou un pingback. React placera ces mĂ©tadonnĂ©es dans le <head>
du document, indĂ©pendamment de leur emplacement dans lâarborescence 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>Mon blog</h1> <p>...</p> </ShowRenderedHTML> ); }
Lier une feuille de styles
Si un composant dĂ©pend dâune certaine feuille de styles pour sâafficher correctement, vous pouvez produire un lien vers cette feuille de styles depuis le composant. Votre composant suspendra le temps que la feuille de styles se charge. Vous pouvez fournir une prop precedence
qui indiquera Ă React oĂč injecter la feuille par rapport aux autres â les feuilles de styles avec une prĂ©cĂ©dence plus forte pourront surcharger celles avec une prĂ©cĂ©dence plus faible.
import ShowRenderedHTML from './ShowRenderedHTML.js'; export default function SiteMapPage() { return ( <ShowRenderedHTML> <link rel="stylesheet" href="sitemap.css" precedence="medium" /> <p>...</p> </ShowRenderedHTML> ); }
ContrĂŽler la priorisation des feuilles de styles
Les feuilles de styles peuvent entrer en conflit, et lorsque câest le cas, le navigateur favorise celle listĂ©e le plus tard dans le document. React vous permet de contrĂŽler lâordre de vos feuilles de styles avec la prop precedence
. Dans cet exemple, deux composants injectent des feuilles de styles, et celle avec la plus forte prĂ©cĂ©dence est injectĂ©e plus tard dans le document, mĂȘme si le composant qui la produit est situĂ© plus tĂŽt.
import ShowRenderedHTML from './ShowRenderedHTML.js'; export default function HomePage() { return ( <ShowRenderedHTML> <FirstComponent /> <SecondComponent /> ... </ShowRenderedHTML> ); } function FirstComponent() { return <link rel="stylesheet" href="first.css" precedence="high" />; } function SecondComponent() { return <link rel="stylesheet" href="second.css" precedence="low" />; }
Dédoublonnement des feuilles de styles
Si vous injectez la mĂȘme feuille de styles depuis plusieurs composants, React nâinjectera quâun seul <link>
dans lâen-tĂȘte du document.
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" />; }
Annoter des éléments spécifiques du document avec des liens
Vous pouvez utiliser le composant <link>
avec la prop itemProp
pour annoter des Ă©lĂ©ments spĂ©cifiques du document avec des liens vers des ressources associĂ©es. Dans ce cas, React, nâinjectera pas ces annotations dans le <head>
du document, mais les placera comme nâimporte quel autre composant React.
<section itemScope>
<h3>Annotation dâĂ©lĂ©ments spĂ©cifiques</h3>
<link itemProp="author" href="http://example.com/" />
<p>...</p>
</section>