usePathname
usePathname
は、現在のURLのpathnameを読み取ることができるClient Componentフックです。
- TypeScript
- JavaScript
app/example-client-component.tsx
'use client'
import { usePathname } from 'next/navigation'
export default function ExampleClientComponent() {
const pathname = usePathname()
return <p>Current pathname: {pathname}</p>
}
app/example-client-component.js
'use client'
import { usePathname } from 'next/navigation'
export default function ExampleClientComponent() {
const pathname = usePathname()
return <p>Current pathname: {pathname}</p>
}
usePathname
は、意図的にClient Componentの使用を必要とします。Client Componentはデオプティマイゼーションではなく、Server Componentsアーキテクチャの重要な部分です。
たとえば、usePathname
を持つClient Componentは、初回のページ読み込み時にHTMLにレンダリングされます。新しいルートに移動するとき、このコンポーネントは再フェッチする必要がありません。このコンポーネントは一度(クライアントのJavaScriptバンドル内で)ダウンロードされ、現在の状態に基づいて再レンダリングされます。
Good to know:
- Server Componentから現在のURLを読み取ることはサポートされていません。この設計は、ページナビゲーション間でレイアウト状態が保持されることをサポートするために意図的になされています。
- 互換性モード:
- fallback ルートがレンダリングされている場合や、Next.jsによって
pages
ディレクトリのページが自動的に静的最適化され、ルーターが準備されていない場合、usePathname
はnull
を返すことがあります。next.config
またはMiddleware
を使用してリライトされた場合にusePathname
を使用する際、ハイドレーションミスマッチエラーを避けるためにuseState
とuseEffect
を使用する必要があります。詳細については、リライトの例をご覧ください。- プロジェクト内に
app
ディレクトリとpages
ディレクトリの両方が存在することをNext.jsが検出すると、自動的に型が更新されます。
パラメータ
const pathname = usePathname()
usePathname
は、パラメータを受け取りません。
戻り値
usePathname
は、現在のURLのpathnameの文字列を返します。たとえば:
URL | 戻り値 |
---|---|
/ | '/' |
/dashboard | '/dashboard' |
/dashboard?v=2 | '/dashboard' |
/blog/hello-world | '/blog/hello-world' |
例
ルートの変更に応じて何かをする
- TypeScript
- JavaScript
app/example-client-component.tsx
'use client'
import { usePathname, useSearchParams } from 'next/navigation'
function ExampleClientComponent() {
const pathname = usePathname()
const searchParams = useSearchParams()
useEffect(() => {
// ここで何かをする...
}, [pathname, searchParams])
}
app/example-client-component.js
'use client'
import { usePathname, useSearchParams } from 'next/navigation'
function ExampleClientComponent() {
const pathname = usePathname()
const searchParams = useSearchParams()
useEffect(() => {
// ここで何かをする...
}, [pathname, searchParams])
}
バージョン | 変更内容 |
---|---|
v13.0.0 | usePathname が導入されました。 |