useRouter
Le hook useRouter
vous permet de changer programmatiquement les routes dans les Composants Client.
Recommandation : Utilisez le composant
<Link>
pour la navigation, sauf si vous avez un besoin spécifique nécessitantuseRouter
.
'use client'
import { useRouter } from 'next/navigation'
export default function Page() {
const router = useRouter()
return (
<button type="button" onClick={() => router.push('/dashboard')}>
Dashboard
</button>
)
}
'use client'
import { useRouter } from 'next/navigation'
export default function Page() {
const router = useRouter()
return (
<button type="button" onClick={() => router.push('/dashboard')}>
Dashboard
</button>
)
}
useRouter()
router.push(href: string, { scroll: boolean })
: Effectue une navigation côté client vers la route fournie. Ajoute une nouvelle entrée dans la pile d'historique du navigateur.router.replace(href: string, { scroll: boolean })
: Effectue une navigation côté client vers la route fournie sans ajouter de nouvelle entrée dans la pile d'historique du navigateur.router.refresh()
: Rafraîchit la route actuelle. Effectue une nouvelle requête vers le serveur, récupère les données et re-rend les Composants Serveur. Le client fusionnera la nouvelle charge utile du Composant Serveur React sans perdre l'état côté client React (par exempleuseState
) ou l'état du navigateur (par exemple la position de défilement).router.prefetch(href: string)
: Précharge la route fournie pour des transitions côté client plus rapides.router.back()
: Navigue vers la route précédente dans la pile d'historique du navigateur.router.forward()
: Navigue vers la page suivante dans la pile d'historique du navigateur.
Bon à savoir :
- Le composant
<Link>
précharge automatiquement les routes lorsqu'elles deviennent visibles dans la fenêtre.refresh()
pourrait produire le même résultat si les requêtes sont mises en cache. D'autres fonctions dynamiques commecookies
etheaders
pourraient aussi modifier la réponse.
Migration depuis next/router
- Le hook
useRouter
doit être importé depuisnext/navigation
et nonnext/router
lors de l'utilisation du Routeur App. - La chaîne
pathname
a été supprimée et remplacée parusePathname()
. - L'objet
query
a été supprimé et remplacé paruseSearchParams()
. router.events
a été remplacé. Voir ci-dessous.
Consultez le guide complet de migration.
Exemples
Événements du routeur
Vous pouvez écouter les changements de page en combinant d'autres hooks de Composant Client comme usePathname
et useSearchParams
.
'use client'
import { useEffect } from 'react'
import { usePathname, useSearchParams } from 'next/navigation'
export function NavigationEvents() {
const pathname = usePathname()
const searchParams = useSearchParams()
useEffect(() => {
const url = `${pathname}?${searchParams}`
console.log(url)
// Vous pouvez maintenant utiliser l'URL courante
// ...
}, [pathname, searchParams])
return null
}
Qui peut être importé dans une mise en page.
import { Suspense } from 'react'
import { NavigationEvents } from './components/navigation-events'
export default function Layout({ children }) {
return (
<html lang="en">
<body>
{children}
<Suspense fallback={null}>
<NavigationEvents />
</Suspense>
</body>
</html>
)
}
Bon à savoir :
<NavigationEvents>
est encapsulé dans une limiteSuspense
caruseSearchParams()
provoque un rendu côté client jusqu'à la limiteSuspense
la plus proche pendant le rendu statique. En savoir plus.
Désactivation de la restauration du défilement
Par défaut, Next.js défile vers le haut de la page lors de la navigation vers une nouvelle route. Vous pouvez désactiver ce comportement en passant scroll: false
à router.push()
ou router.replace()
.
'use client'
import { useRouter } from 'next/navigation'
export default function Page() {
const router = useRouter()
return (
<button
type="button"
onClick={() => router.push('/dashboard', { scroll: false })}
>
Dashboard
</button>
)
}
'use client'
import { useRouter } from 'next/navigation'
export default function Page() {
const router = useRouter()
return (
<button
type="button"
onClick={() => router.push('/dashboard', { scroll: false })}
>
Dashboard
</button>
)
}
Historique des versions
Version | Changements |
---|---|
v13.0.0 | useRouter depuis next/navigation introduit. |