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.

Presentify

Take your presentation to the next level.

FaceScreen

Put your face and name on your screen.

ToDoBar

Your to-dos on your menu bar.

Ram Patra Published on December 21, 2024
Image placeholder

Keep reading

If this article was helpful, others might be too

question nextjs react February 9, 2024 Main advantages of using the Link component in Next.js over Anchors and Buttons

The main advantage of using the Link component in Next.js for client-side navigation is its optimized prefetching behavior, which enhances the performance and user experience of your web application. Here’s a breakdown of the key advantages:

question nextjs react November 17, 2024 How to define metadata in a client component in Nextjs?

Nextjs does not allow defining the metadata object in client components. There are a couple of ways to resolve this problem. I will be talking about two of them here.

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.