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.
Step-by-Step Example
- Install Next.js (if you haven’t already):
npx create-next-app@latest my-next-app cd my-next-app npm run dev -
Create a new page: Let’s create a new page to navigate to. Create a file named
page.jsxin theaboutdirectory.// app/about/page.jsx export default function About() { return ( <div> <h1>About Page</h1> <p>This is the about page.</p> </div> ); } -
Set up navigation in another component: Use the
useRouterhook to navigate to the “About” page when a button is clicked. Modify theindex.jsxfile in theappdirectory.// app/index.jsx import { useRouter } from 'next/navigation'; import React from 'react'; export default function Home() { const router = useRouter(); const navigateToAbout = () => { router.push('/about'); }; return ( <div> <h1>Home Page</h1> <button onClick={navigateToAbout}>Go to About Page</button> </div> ); } - Run the Next.js development server:
npm run dev
Now, when you open your browser and navigate to http://localhost:3000, you should see the Home Page with a button labeled “Go to About Page.” When you click the button, it will programmatically navigate to the About Page.
Detailed Explanation
- useRouter Hook:
- The
useRouterhook fromnext/navigationgives you access to the router object, which includes methods for navigation.
import { useRouter } from 'next/navigation'; - The
- router.push:
router.push('/about')is used to navigate to the/aboutpage. This is similar to navigating using a link but done programmatically.
const navigateToAbout = () => { router.push('/about'); }; - Button Click Handler:
- The
navigateToAboutfunction is called when the button is clicked, triggering the navigation.
<button onClick={navigateToAbout}>Go to About Page</button> - The
This approach can be extended to navigate to different pages, pass query parameters, or even handle more complex routing logic as required in your Next.js application.