組み込みブラウザの<link>
コンポーネントを使用すると、スタイルシートなどの外部リソースを使用したり、リンクメタデータを使用してドキュメントに注釈を付けることができます。
<link rel="icon" href="favicon.ico" />
リファレンス
<link>
スタイルシート、フォント、アイコンなどの外部リソースへのリンク、またはリンクメタデータを使用してドキュメントに注釈を付けるには、組み込みブラウザの<link>
コンポーネントをレンダリングします。<link>
は任意のコンポーネントからレンダリングでき、React はほとんどの場合、対応するDOM要素をドキュメントのheadに配置します。
<link rel="icon" href="favicon.ico" />
プロパティ
<link>
はすべて共通の要素プロパティをサポートしています。
rel
: 文字列、必須。リソースとの関係を指定します。Reactはrel="stylesheet"
を持つリンクを他のリンクとは異なる方法で扱います。
これらのプロパティは、rel="stylesheet"
の場合に適用されます。
precedence
: 文字列。Reactに、ドキュメントの<head>
内の他の<link>
DOMノードに対する順位を指示します。これにより、どのスタイルシートが他のスタイルシートを上書きできるかが決まります。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
:文字列。フェッチ時に送信するRefererヘッダー。可能な値は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は、Reactツリー内のどこにレンダリングされていても、常に<link>
コンポーネントに対応するDOM要素をドキュメントの<head>
内に配置します。<head>
はDOM内で<link>
が存在できる唯一の有効な場所ですが、特定のページを表すコンポーネントが<link>
コンポーネント自体をレンダリングできる方が便利で、構成性を維持できます。
これにはいくつかの例外があります。
<link>
にrel="stylesheet"
プロパティがある場合、この特別な動作を得るにはprecedence
プロパティも必要です。これは、ドキュメント内のスタイルシートの順序が重要であるため、Reactはprecedence
プロパティを使用して指定する他のスタイルシートとの相対的な順序を知る必要があるためです。precedence
プロパティを省略すると、特別な動作は発生しません。<link>
要素にitemProp
プロパティがある場合、特別な動作はありません。これは、ドキュメント全体ではなく、ページの特定の部分に関するメタデータを表すためです。<link>
要素にonLoad
またはonError
プロパティがある場合も、特別な動作はありません。この場合、リンクされたリソースの読み込みはReactコンポーネント内で手動で管理しているためです。
スタイルシートの特別な動作
さらに、<link>
がスタイルシートへのリンクである場合(つまり、プロパティにrel="stylesheet"
を持つ場合)、Reactは次のように特別な処理を行います。
<link>
をレンダリングするコンポーネントは、スタイルシートの読み込み中は一時停止(サスペンド)します。- 複数のコンポーネントが同じスタイルシートへのリンクをレンダリングする場合、Reactはそれらを重複排除し、DOMに単一のリンクのみを配置します。2つのリンクは、
href
プロパティが同じであれば、同じと見なされます。
この特別な動作には2つの例外があります。
- リンクに
precedence
プロパティがない場合、特別な動作はありません。ドキュメント内のスタイルシートの順序は重要であるため、Reactは他のスタイルシートに対するこのスタイルシートの順序を知る必要があります。これはprecedence
プロパティを使用して指定します。 onLoad
、onError
、またはdisabled
プロパティのいずれかを指定した場合、特別な動作はありません。これらのプロパティは、スタイルシートの読み込みをコンポーネント内で手動で管理していることを示しているためです。
この特別な処理には、2つの注意点があります。
- リンクがレンダリングされた後、プロパティの変更はReactによって無視されます。(開発環境では、これが発生した場合、警告が表示されます。)
- レンダリングしたコンポーネントがアンマウントされた後も、ReactはリンクをDOMに残しておく場合があります。
使用方法
関連リソースへのリンク
アイコン、正規URL、ピンバックなどの関連リソースへのリンクを使用して、ドキュメントに注釈を付けることができます。Reactは、Reactツリー内のどこにレンダリングされていても、このメタデータをドキュメントの<head>
内に配置します。
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に他のスタイルシートと比較してこのスタイルシートをどこに配置するかを伝えるものです。優先順位が高いスタイルシートは、優先順位が低いスタイルシートを上書きできます。
import ShowRenderedHTML from './ShowRenderedHTML.js'; export default function SiteMapPage() { return ( <ShowRenderedHTML> <link rel="stylesheet" href="sitemap.css" precedence="medium" /> <p>...</p> </ShowRenderedHTML> ); }
スタイルシートの優先順位の制御
スタイルシートは互いに競合することがあり、その場合、ブラウザはドキュメントで後に出現するスタイルシートを採用します。Reactでは、precedence
プロパティを使用してスタイルシートの順序を制御できます。この例では、2つのコンポーネントがスタイルシートをレンダリングしますが、優先順位が高い方が、レンダリングするコンポーネントが先に来ている場合でも、ドキュメントで後に出現します。
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" />; }
重複排除されたスタイルシートのレンダリング
複数のコンポーネントから同じスタイルシートをレンダリングする場合、Reactはドキュメントのheadに単一の<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>