La différence entre useRouter provenant de next/router et useRouter provenant de next/navigation dépend principalement de la version de Next.js et du système de routage utilisé (pages traditionnelles ou App Router introduit à partir de Next.js 13).
1. useRouter depuis next/router
- Utilisation : Conçu pour le système de routage classique basé sur les dossiers dans
/pages. - Caractéristiques principales :
- Fonctionne uniquement dans les composants React client-side.
- Propose des méthodes comme
push,replace,reload, et des informations sur la route actuelle (ex.pathname,query).
- Exemple :
import { useRouter } from 'next/router'; const MyComponent = () => { const router = useRouter(); const goToPage = () => { router.push('/another-page'); }; return <button onClick={goToPage}>Go to Another Page</button>; }; export default MyComponent;- Pour qui ?
- Utilisateurs de Next.js <13.
- Projets qui utilisent encore l’ancienne structure des routes dans
/pages.
2. useRouter depuis next/navigation
- Utilisation : Conçu pour l’App Router, introduit dans Next.js 13 (et versions ultérieures) avec le dossier
/app. - Caractéristiques principales :
- Fonctionne avec les composants React server-side et client-side.
- Propose des fonctionnalités simplifiées :
- Navigation avec
push,replace, etback. - Méthodes adaptées au modèle moderne de rendu et de streaming des données.
- Navigation avec
- Ne fournit pas directement d’accès aux informations sur la route actuelle (
query,pathname, etc.) que vous deviez souvent récupérer autrement dans l’App Router.
- Exemple :
import { useRouter } from 'next/navigation'; const MyComponent = () => { const router = useRouter(); const goToPage = () => { router.push('/another-page'); }; return <button onClick={goToPage}>Go to Another Page</button>; }; export default MyComponent; - Pour qui ?
- Utilisateurs de l’App Router avec le dossier
/appdans Next.js 13 et plus. - Projets qui souhaitent bénéficier des nouvelles fonctionnalités de Next.js, comme le rendering server-side progressif ou le rendu asynchrone.
- Utilisateurs de l’App Router avec le dossier
Principales Différences
| Fonctionnalité | next/router | next/navigation |
|---|---|---|
| Version de Next.js | <13 (ou système /pages) | >=13 (système /app) |
| Composants Server-side | Non supporté | Supporté |
Accès à pathname & query | Oui | Non (utilisez des hooks comme usePathname) |
| Navigation | push, replace, reload | push, replace, back |
| Mode d’utilisation | Historique | Moderne |
Quand Utiliser le Bon useRouter ?
- Projets
pages/(Legacy) : Continuez avecnext/router. - Projets
app/(App Router) : Utiliseznext/navigation. Pour accéder aux informations de la route, combinez-le avec des hooks commeusePathnameouuseSearchParams.
Si vous démarrez un nouveau projet Next.js avec la structure moderne, il est recommandé d’utiliser next/navigation.