<link>🌐 <link> – React - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - Cette fonctionnalitĂ© est disponible dans le dernier Canary - fr.react.dev

Canary (fonctionnalité expérimentale)

Les extensions de React à <link> ne sont actuellement disponibles que sur les canaux de livraison Canary et Expérimental de React. Dans les versions stables de React, <link> fonctionne comme le composant HTML natif du navigateur. Apprenez-en davantage sur les canaux de livraison React.

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

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.

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 fonction preinit.
  • 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 sont audio, document, embed, fetch, font, image, object, script, style, track, video ou worker.
  • imageSrcSet : une chaĂźne de caractĂšres, utilisable uniquement lorsque as="image". Indique le jeu de sources de l’image.
  • imageSizes : une chaĂźne de caractĂšres, utilisable uniquement lorsque as="image". Indique le jeu de tailles de l’image.

Ces props sont disponibles lorsque rel="icon" ou rel="apple-touch-icon" :

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 sont anonymous et use-credentials. Elle est obligatoire lorsque as vaut "fetch".
  • referrerPolicy : une chaĂźne de caractĂšres. L’en-tĂȘte Referrer Ă  envoyer lors du chargement. Les valeurs possibles sont no-referrer-when-downgrade (par dĂ©faut), no-referrer, origin, origin-when-cross-origin ou unsafe-url.
  • fetchPriority : une chaĂźne de caractĂšres. SuggĂšre une prioritĂ© relative pour le chargement de la ressource. Les valeurs possibles sont auto (par dĂ©faut), high ou low.
  • 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 prop rel="stylesheet", il doit Ă©galement disposer d’une prop precedence 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 prop precedence. Si la prop precedence est manquante, le composant ne sera pas injectĂ© dans le <head>.
  • Si le <link> a une prop itemProp, 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 prop onLoad ou onError, 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 prop precedence.
  • Si vous fournissez une prop onLoad, onError ou disabled, 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

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.

Remarque

Lorsque vous souhaitez utiliser une feuille de styles, il peut ĂȘtre avantageux d’appeler la fonction preinit. Appeler cette fonction peut permettre au navigateur de commencer Ă  charger la feuille de styles plus tĂŽt que lorsque vous produisez simplement un composant <link>, en envoyant par exemple une rĂ©ponse 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>
  );
}

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" />;
}

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>