redirect
redirect
関数を使用すると、ユーザーを別のURLにリダイレクトできます。redirect
はサーバーコンポーネント、クライアントコンポーネント、Route Handlers(ルートハンドラ)、およびServer Actions(サーバーアクション)で使用可能です。
ストリーミングコンテキストで使用すると、クライアントサイドでリダイレクトを実行するためのmetaタグが挿入されます。それ以外の場合は、呼び出し元に307 HTTPリダイレクトレスポンスを返します。
リソースが存在しない場合は、代わりにnotFound
関数を使用できます。
豆知識: 307(一時的)ではなく308(恒久的)HTTPリダイレクトを返したい場合は、代わりに
permanentRedirect
関数を使用できます。
パラメータ
redirect
関数は2つの引数を受け取ります:
redirect(path, type)
パラメータ | タイプ | 説明 |
---|---|---|
path | string | リダイレクト先のURL。相対パスまたは絶対パスを指定可能。 |
type | 'replace' (デフォルト)または 'push' (Server Actionsではデフォルト) | 実行するリダイレクトのタイプ。 |
デフォルトでは、redirect
はServer Actions(サーバーアクション)ではpush
(ブラウザの履歴スタックに新しいエントリを追加)を、それ以外の場所ではreplace
(ブラウザの履歴スタックで現在のURLを置換)を使用します。type
パラメータを指定することでこの動作を上書きできます。
type
パラメータはサーバーコンポーネントで使用した場合には効果がありません。
戻り値
redirect
は値を返しません。
例
redirect()
関数を呼び出すとNEXT_REDIRECT
エラーがスローされ、スローされたルートセグメントのレンダリングが終了します。
import { redirect } from 'next/navigation'
async function fetchTeam(id) {
const res = await fetch('https://...')
if (!res.ok) return undefined
return res.json()
}
export default async function Profile({ params }) {
const team = await fetchTeam(params.id)
if (!team) {
redirect('/login')
}
// ...
}
豆知識:
redirect
はTypeScriptのnever
型を使用しているため、return redirect()
と記述する必要はありません。
バージョン | 変更点 |
---|---|
v13.0.0 | redirect が導入されました。 |