In Next.js, there are two main ways to handle routing programmatically:
1. next/router
- This is the older routing API used in Next.js.
- It relies on the
useRouterhook orRouterobject for client-side navigation. - Commonly used in Next.js versions before the introduction of the App Router.
Key Features:
- Primarily designed for pages directory-based routing.
- Works well in Next.js projects with the Pages Router (the default routing system in versions before Next.js 13).
- Includes methods for programmatic navigation (
push,replace, etc.).
Example:
import { useRouter } from 'next/router';
export default function MyComponent() {
const router = useRouter();
const handleNavigation = () => {
router.push('/about'); // Navigate to /about
};
return <button onClick={handleNavigation}>Go to About</button>;
}
Common Use Cases:
- Navigating between pages in the Pages Router system.
- Accessing router query parameters (
router.query).
2. next/navigation
- This is the newer routing API introduced with the App Router in Next.js 13.
- Designed to work with the new file-based App Router system.
- Focuses on a more declarative and streamlined approach to routing.
Key Features:
- Provides hooks and utilities like
useRouter(similar tonext/router) but tailored for the App Router. - Includes new utilities like
usePathname,useSearchParams, andredirectfor modern app routing needs. - Works seamlessly with React Server Components (RSC).
Example:
'use client'; // Required for client-side logic
import { useRouter } from 'next/navigation';
export default function MyComponent() {
const router = useRouter();
const handleNavigation = () => {
router.push('/about'); // Navigate to /about
};
return <button onClick={handleNavigation}>Go to About</button>;
}
Common Use Cases:
- Navigating in App Router-based projects.
- Accessing and manipulating URL paths or search parameters (
useSearchParams,usePathname).
Key Differences:
| Feature | next/router |
next/navigation |
|---|---|---|
| Designed For | Pages Router | App Router |
| Client/Server Support | Client-side only | Tailored for both client and server |
| Routing Hooks | useRouter, Router object |
useRouter, usePathname, etc. |
| Support for RSC | Not designed for React Server Components | Fully compatible with React Server Components |
| URL Handling | Query-based (router.query) |
Pathname and search parameter-based |
When to Use Which?
- If you’re using the Pages Router: Use
next/router. - If you’re using the App Router: Use
next/navigation.
For new projects, especially those starting with Next.js 13 or later, it’s recommended to use the App Router and the next/navigation API for a more modern, flexible approach to routing.