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 Componentsは最適化を妨げるものではなく、Server Componentsアーキテクチャの重要な部分です。
たとえば、usePathname
を使用したClient Componentは初回のページロード時にHTMLにレンダリングされます。新しいルートに移動するとき、このコンポーネントを再取得する必要はありません。代わりに、このコンポーネントは一度(クライアントのJavaScriptバンドルで)ダウンロードされ、現在の状態に基づいて再レンダリングされます。
Good to know:
- Server Componentから現在のURLを読み取ることはサポートされていません。この設計は、ページ遷移をしてもレイアウト状態を保持するために意図されたものです。
- 互換モード:
- fallbackルートがレンダリングされる際、または
pages
ディレクトリのページがNext.jsによって自動静的最適化され、ルーターが準備完了でない際には、usePathname
がnull
を返すことがあります。next.config
またはMiddleware
で書き換えを使用する際には、ハイドレーションミスマッチエラーを避けるためにuseState
およびuseEffect
も使用する必要があります。詳細は書き換えの例を参照してください。- プロジェクト内に
app
ディレクトリとpages
ディレクトリの両方が検出されると、自動的に型が更新されます。
パラメータ
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 が導入されました |