Inertiaアプリケーション内で他のページへのリンクを作成するには、通常、Inertiaの<Link>
を使用します。コンポーネントを使用します。このコンポーネントは、クリックイベントをインターセプトしてページ全体の再読み込みを防ぐ標準的なアンカー<a>
リンクの軽量なラッパーです。これは、 Inertiaがアプリケーションの読み込み後にシングルページアプリケーションのエクスペリエンスを提供する仕組みです。
Inertiaリンクを作成するには、Inertiaの<Link>
コンポーネントを使用します。このコンポーネントに指定した属性は、基になるHTMLタグにプロキシされます。
import { Link } from '@inertiajs/vue3'
<Link href="/">Home</Link>
デフォルトでは、Inertiaはリンクをアンカー<a>
要素としてレンダリングします。ただし、as
プロパティを使用してタグを変更できます。
import { Link } from '@inertiajs/vue3'
<Link href="/logout" method="post" as="button" type="button">Logout</Link>
// Renders as...
<button type="button">Logout</button>
POST
/PUT
/PATCH
/DELETE
のアンカー<a>
リンクを作成することは、「新しいタブ/ウィンドウでリンクを開く」というアクセシビリティの問題を引き起こすため、推奨されません。代わりに、<button>
などのより適切な要素を使用することを検討してください。InertiaリンクのリクエストにHTTPリクエストメソッドを指定するには、method
プロパティを使用します。リンクで使用されるデフォルトのメソッドはGET
ですが、method
プロパティを使用して、 リンク経由でPOST
、PUT
、PATCH
、およびDELETE
リクエストを行うことができます。
import { Link } from '@inertiajs/vue3'
<Link href="/logout" method="post" as="button">Logout</Link>
POST
またはPUT
リクエストを行う際に、リクエストに追加のデータを追加したい場合があります。これはdata
プロパティを使用して実現できます。提供されるデータはobject
または FormData
インスタンスです。
import { Link } from '@inertiajs/vue3'
<Link href="/endpoint" method="post" :data="{ foo: bar }">Save</Link>
headers
プロパティを使用すると、Inertiaリンクにカスタムヘッダーを追加できます。ただし、Inertiaが内部的にサーバーに状態を伝えるために使用するヘッダーは優先度が高いため、上書きすることはできません。
import { Link } from '@inertiajs/vue3'
<Link href="/endpoint" :headers="{ foo: bar }">Save</Link>
replace
プロパティを使用すると、ブラウザの履歴の動作を指定できます。デフォルトでは、ページへのアクセスは、履歴に(新しい)状態(window.history.pushState
)をプッシュします。ただし、replace
プロパティをtrue
に設定することで、状態(window.history.replaceState
)を置き換えることもできます。これにより、アクセスは、スタックに新しい履歴状態を追加する代わりに、現在の履歴状態を置き換えます。
import { Link } from '@inertiajs/vue3'
<Link href="/" replace>Home</Link>
preserve-state
プロパティを使用して、ページコンポーネントのローカル状態を保持できます。これにより、ページコンポーネントが完全に再レンダリングされるのを防ぎます。preserve-state
プロパティは、フォームを含むページで特に役立ちます。手動で入力フィールドに再入力することを避け、フォーカスされた入力を維持できるためです。
import { Link } from '@inertiajs/vue3'
<input v-model="query" type="text" />
<Link href="/search" :data="{ query }" preserve-state>Search</Link>
preserveScroll
プロパティを使用して、ページへのアクセス時にInertiaが自動的にスクロール位置をリセットするのを防ぐことができます。
import { Link } from '@inertiajs/vue3'
<Link href="/" preserve-scroll>Home</Link>
スクロール位置の管理に関する詳細については、ドキュメントの スクロール管理.
を参照してください。only
プロパティを使用すると、ページのプロパティ(データ)のサブセットのみを、そのページへの以降のアクセスでサーバーから取得する必要があることを指定できます。
import { Link } from '@inertiajs/vue3'
<Link href="/users?active=true" :only="['users']">Show active</Link>
このトピックの詳細については、完全なドキュメントの 部分的なリロード.
アクティブ状態
import { Link } from '@inertiajs/vue3'
// URL exact match...
<Link href="/users" :class="{ 'active': $page.url === '/users' }">Users</Link>
// Component exact match...
<Link href="/users" :class="{ 'active': $page.component === 'Users/Index' }">Users</Link>
// URL starts with (/users, /users/create, /users/1, etc.)...
<Link href="/users" :class="{ 'active': $page.url.startsWith('/users') }">Users</Link>
// Component starts with (Users/Index, Users/Create, Users/Show, etc.)...
<Link href="/users" :class="{ 'active': $page.component.startsWith('Users') }">Users</Link>
現在のページに基づいてナビゲーションリンクのアクティブ状態を設定することが望ましいことがよくあります。これは、Inertiaを使用する場合、page
オブジェクトを調べて、page.url
およびpage.component
プロパティに対して文字列比較を行うことで実現できます。
完全一致比較(===
)、startsWith()
比較(ページのサブセットを一致させるのに役立ちます)、または正規表現を使用したより複雑な比較を実行できます。