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
useRouter
hook orRouter
object 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
, andredirect
for 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.