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 July 9, 2024 How to define an enum in Typescript and use it in a Next.js app?

Creating an enum in TypeScript within a Next.js project is straightforward. Enums in TypeScript allow you to define a set of named constants that can be used to represent a collection of related values. Here’s how you can create and use an enum in a Next.js application:

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.

question nextjs react July 9, 2024 How to create custom types in Typescript in a Next.js app?

Declaring custom types in TypeScript for a Next.js application involves creating type definitions that can be used across your project to ensure type safety and better code management. Here are the steps to declare and use custom types in a Next.js app:

Like my work?

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