Loading...

Difference between router in next/navigation and next/router in Next.js?

question nextjs front-end
Ram Patra Published on December 21, 2024

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 or Router 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 to next/router) but tailored for the App Router.
  • Includes new utilities like usePathname, useSearchParams, and redirect 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.

Take your presentation to the next level.

Put your face and name on your screen.

Your to-dos on your menu bar.

Fill forms using your right-click menu.

Ram Patra Published on December 21, 2024
Image placeholder

Keep reading

If this article was helpful, others might be too

question nextjs react July 18, 2024 How to programmatically navigate to a page in Next.js?

In Next.js, you can programmatically navigate to different pages using the useRouter hook from the next/navigation module. This hook provides a convenient way to navigate between pages within your Next.js application. Below is an example demonstrating how to use the useRouter hook to programmatically navigate to another page.

question nextjs cloudflare March 19, 2025 How to run a website built with Next.js 15 on Cloudflare Pages?

If you simply connect a website’s code on GitHub with Cloudflare Pages that’s built using Next.js 15+, it may not build successfully out of the box. If this is the case with you, make sure to do the following.

question nextjs front-end July 21, 2024 How to fix Next.js generating Open Graph images with localhost in the url?

This happens when you have not set the metadata properly. Just make sure you have set the metadataBase property like below:export const metadata = { metadataBase: new URL('https://rampatra.com'), // other configs}Learn more from the official docs.

Like my work?

Please, feel free to reach out. I would be more than happy to chat.