<NuxtLink>
Nuxtは、アプリケーション内のあらゆる種類のリンクを処理するための
<NuxtLink>
コンポーネントを提供します。<NuxtLink>
は、Vue Routerの<RouterLink>
コンポーネントとHTMLの<a>
タグの両方のドロップイン置換です。リンクが内部か外部かをインテリジェントに判断し、利用可能な最適化(プリフェッチ、デフォルト属性など)を使用して適切にレンダリングします。内部ルーティング
この例では、<NuxtLink>
コンポーネントを使用して、アプリケーションの別のページにリンクします。
pages/index.vue
<template>
<NuxtLink to="/about">
About page
</NuxtLink>
<!-- <a href="/about">...</a> (+Vue Router & prefetching) -->
</template>
動的ルートへのパラメーターの渡す
この例では、id
パラメーターを渡して~/pages/posts/[id].vue
ルートにリンクします。
pages/index.vue
<template>
<NuxtLink :to="{ name: 'posts-id', params: { id: 123 } }">
Post 123
</NuxtLink>
</template>
Nuxt DevToolsのページパネルで、ルート名とそのパラメーターを確認できます。
404エラーの処理
<NuxtLink>
を/public
ディレクトリのファイルに使用する場合、または同じドメイン上の別のアプリケーションを指す場合、external
プロップを使用する必要があります。
external
を使用すると、リンクはVue RouterのRouterLink
ではなくa
タグとしてレンダリングされます。
pages/index.vue
<template>
<NuxtLink to="/the-important-report.pdf" external>
Download Report
</NuxtLink>
<!-- <a href="/the-important-report.pdf"></a> -->
</template>
絶対URLを使用する場合、およびtarget
プロップを提供する場合、外部ロジックはデフォルトで適用されます。
外部ルーティング
この例では、<NuxtLink>
コンポーネントを使用してウェブサイトにリンクします。
app.vue
<template>
<NuxtLink to="https://nuxt.dokyumento.jp">
Nuxt website
</NuxtLink>
<!-- <a href="https://nuxt.dokyumento.jp" rel="noopener noreferrer">...</a> -->
</template>
target
属性とrel
属性
noopener noreferrer
のrel
属性は、新しいタブで開く絶対リンクとリンクにデフォルトで適用されます。
noopener
は、古いブラウザでのセキュリティバグを解決します。noreferrer
は、リンク先のサイトにReferer
ヘッダーを送信しないことで、ユーザーのプライバシーを向上させます。
これらのデフォルトはSEOに悪影響を与えず、ベストプラクティスと見なされています。
この動作を上書きする必要がある場合は、rel
プロップとnoRel
プロップを使用できます。
app.vue
<template>
<NuxtLink to="https://twitter.com/nuxt_js" target="_blank">
Nuxt Twitter
</NuxtLink>
<!-- <a href="https://twitter.com/nuxt_js" target="_blank" rel="noopener noreferrer">...</a> -->
<NuxtLink to="https://discord.nuxtjs.org" target="_blank" rel="noopener">
Nuxt Discord
</NuxtLink>
<!-- <a href="https://discord.nuxtjs.org" target="_blank" rel="noopener">...</a> -->
<NuxtLink to="https://github.com/nuxt" no-rel>
Nuxt GitHub
</NuxtLink>
<!-- <a href="https://github.com/nuxt">...</a> -->
<NuxtLink to="/contact" target="_blank">
Contact page opens in another tab
</NuxtLink>
<!-- <a href="/contact" target="_blank" rel="noopener noreferrer">...</a> -->
</template>
プロップ
RouterLink
external
を使用しない場合、<NuxtLink>
は、Vue RouterのRouterLink
プロップをすべてサポートします。
to
:任意のURLまたはVue Routerのルートロケーションオブジェクトcustom
:<NuxtLink>
がそのコンテンツを<a>
要素でラップするかどうか。リンクのレンダリング方法とクリック時のナビゲーション方法を完全に制御できます。Vue Routerのcustom
プロップと同じように機能します。exactActiveClass
:正確にアクティブなリンクに適用するクラス。Vue Routerのexact-active-class
プロップと内部リンクで同じように機能します。(デフォルトはVue Routerのデフォルトの"router-link-exact-active"
)replace
:内部リンクでVue Routerのreplace
プロップと同じように機能します。ariaCurrentValue
:正確にアクティブなリンクに適用するaria-current
属性の値。Vue Routerのaria-current-value
プロップと内部リンクで同じように機能します。activeClass
:アクティブなリンクに適用するクラス。Vue Routerのactive-class
プロップと内部リンクで同じように機能します。(デフォルトはVue Routerのデフォルトの"router-link-active"
)
NuxtLink
href
:to
のエイリアス。to
と一緒に使用する場合、href
は無視されます。noRel
:true
に設定すると、リンクにrel
属性が追加されません。external
:リンクをVue RouterのRouterLink
ではなくa
タグとしてレンダリングすることを強制します。prefetch
:有効にすると、ビューポート内のリンクのミドルウェア、レイアウト、ペイロード(payloadExtractionを使用する場合)をプリフェッチします。crossOriginPrefetch設定で使用されます。prefetchOn
:リンクをプリフェッチするタイミングをカスタムで制御できます。可能なオプションはinteraction
とvisibility
(デフォルト)です。完全な制御のためにオブジェクトを渡すこともできます。例:{ interaction: true, visibility: true }
。このプロップは、prefetch
が有効(デフォルト)でnoPrefetch
が設定されていない場合にのみ使用されます。noPrefetch
:プリフェッチを無効にします。prefetchedClass
:プリフェッチされたリンクに適用するクラス。
アンカー
target
:リンクに適用するtarget
属性の値rel
:リンクに適用するrel
属性の値。外部リンクの場合は"noopener noreferrer"
がデフォルトです。
デフォルトは上書きできます。デフォルトの上書きを参照してください。
デフォルトの上書き
Nuxt設定
nuxt.config
で、いくつかの<NuxtLink>
のデフォルトを上書きできます。
これらのオプションは、将来
app.config
やapp/
ディレクトリなど、他の場所に移動される可能性があります。nuxt.config.ts
export default defineNuxtConfig({
experimental: {
defaults: {
nuxtLink: {
// default values
componentName: 'NuxtLink',
externalRelAttribute: 'noopener noreferrer',
activeClass: 'router-link-active',
exactActiveClass: 'router-link-exact-active',
prefetchedClass: undefined, // can be any valid string class name
trailingSlash: undefined // can be 'append' or 'remove'
}
}
}
})
カスタムリンクコンポーネント
defineNuxtLink
を使用して独自のリンクコンポーネントを作成することで、<NuxtLink>
のデフォルトを上書きできます。
components/MyNuxtLink.ts
export default defineNuxtLink({
componentName: 'MyNuxtLink',
/* see signature below for more */
})
その後、<MyNuxtLink />
コンポーネントを新しいデフォルトで通常どおり使用できます。
defineNuxtLink
シグネチャ
interface NuxtLinkOptions {
componentName?: string;
externalRelAttribute?: string;
activeClass?: string;
exactActiveClass?: string;
trailingSlash?: 'append' | 'remove'
prefetch?: boolean
prefetchedClass?: string
prefetchOn?: Partial<{
visibility: boolean
interaction: boolean
}>
}
function defineNuxtLink(options: NuxtLinkOptions): Component {}
componentName
:コンポーネントの名前。デフォルトはNuxtLink
です。externalRelAttribute
:外部リンクに適用されるデフォルトのrel
属性の値。デフォルトは"noopener noreferrer"
です。無効にするには""
に設定します。activeClass
:アクティブなリンクに適用するデフォルトのクラス。Vue RouterのlinkActiveClass
オプションと同じように機能します。(デフォルトはVue Routerのデフォルトの"router-link-active"
)exactActiveClass
:正確にアクティブなリンクに適用するデフォルトのクラス。Vue RouterのlinkExactActiveClass
オプションと同じように機能します。(デフォルトはVue Routerのデフォルトの"router-link-exact-active"
)trailingSlash
:href
に末尾のスラッシュを追加または削除するオプション。設定されていない場合、または有効な値append
またはremove
と一致しない場合、無視されます。prefetch
:デフォルトでリンクをプリフェッチするかどうか。prefetchOn
:デフォルトで適用するプリフェッチ戦略の詳細な制御。prefetchedClass
: プリフェッチされたリンクに適用されるデフォルトクラスです。
ドキュメント > 例 > ルーティング > ページでライブ例を参照および編集できます。