📖 Scenario: You are building a simple Next.js app with two pages: a homepage and a profile page. You want to add a button on the homepage that takes the user to the profile page when clicked.
🎯 Goal: Build a Next.js component that uses the useRouter hook to navigate programmatically from the homepage to the profile page when a button is clicked.
📋 What You'll Learn
Create a functional component called HomePage
Import and use the useRouter hook from next/router
Create a button with the text Go to Profile
Add a click handler that uses router.push('/profile') to navigate
💡 Why This Matters
🌍 Real World
Programmatic navigation is common in web apps to move users between pages based on actions like button clicks or form submissions.
💼 Career
Understanding useRouter and programmatic navigation is essential for building interactive Next.js applications and is a common task in frontend development roles.
Progress0 / 4 steps
1
Set up the HomePage component
Create a functional component called HomePage that returns a div with the text Welcome to the homepage.
NextJS
Hint
Use a function that returns JSX with a div containing the welcome text.
2
Import useRouter from next/router
Add an import statement to import useRouter from next/router at the top of the file.
NextJS
Hint
Use import { useRouter } from 'next/router'; at the top.
3
Create router instance and add button
Inside the HomePage component, create a constant called router by calling useRouter(). Then add a button with the text Go to Profile inside the returned div.
NextJS
Hint
Create const router = useRouter(); and add a button inside the div.
4
Add click handler to navigate programmatically
Add an onClick handler to the button that calls router.push('/profile') to navigate to the profile page when clicked.
NextJS
Hint
Add onClick={() => router.push('/profile')} to the button.
Practice
(1/5)
1. What does the useRouter hook from next/navigation allow you to do in a Next.js app?
easy
A. Navigate between pages programmatically using code
B. Automatically reload the page on data change
C. Fetch data from an API endpoint
D. Style components with CSS modules
Solution
Step 1: Understand the purpose of useRouter
The useRouter hook provides methods to change pages in code, not by user clicking links.
Step 2: Identify what useRouter does not do
It does not handle data fetching, styling, or auto-reloading pages.
Final Answer:
Navigate between pages programmatically using code -> Option A
Quick Check:
useRouter = programmatic navigation [OK]
Hint: useRouter lets you move pages by code, not by clicking [OK]
Common Mistakes:
Confusing useRouter with data fetching hooks
Thinking useRouter styles components
Assuming useRouter reloads pages automatically
2. Which of the following is the correct way to import useRouter from Next.js 14+ for programmatic navigation?
easy
A. import { useRouter } from 'next/navigation';
B. import useRouter from 'next/navigation';
C. import { useRouter } from 'next/router';
D. import { useRouter } from 'next/navigation/useRouter';
Solution
Step 1: Recall the correct import path for useRouter in Next.js 14+
In Next.js 14+, useRouter is imported from next/navigation, not next/router.
Step 2: Check syntax correctness
import { useRouter } from 'next/navigation'; uses named import from the correct module. import useRouter from 'next/navigation'; misses braces, causing syntax error. import { useRouter } from 'next/navigation/useRouter'; uses a wrong path.
Final Answer:
import { useRouter } from 'next/navigation'; -> Option A
Quick Check:
Correct import = import { useRouter } from 'next/navigation'; [OK]
Hint: Use named import from 'next/navigation' for useRouter [OK]
Common Mistakes:
Importing from 'next/router' instead of 'next/navigation'
Missing curly braces in import
Using incorrect import paths
3. Given this code snippet in a Next.js component, what will happen when the button is clicked?
import { useRouter } from 'next/navigation';
export default function Home() {
const router = useRouter();
return (
<button onClick={() => router.push('/about')}>Go to About</button>
);
}
medium
A. The page will navigate to '/about' replacing the current history entry
B. The page will reload but stay on the same URL
C. The page will navigate to '/about' adding a new entry in browser history
D. Nothing happens because router.push is invalid
Solution
Step 1: Understand router.push behavior
The router.push('/about') method navigates to the '/about' page and adds a new entry in the browser history stack.
Step 2: Confirm the code triggers navigation on button click
The button's onClick calls router.push correctly, so navigation happens as expected.
Final Answer:
The page will navigate to '/about' adding a new entry in browser history -> Option C
Quick Check:
router.push adds history entry = The page will navigate to '/about' adding a new entry in browser history [OK]
Hint: router.push adds new history entry and navigates [OK]
Common Mistakes:
Confusing router.push with router.replace
Thinking router.push reloads current page
Assuming router.push does nothing without await
4. Identify the error in this Next.js component using useRouter for navigation:
A. useRouter should be imported from 'next/router'
B. router.push should be router.replace
C. Button onClick should be onClick={router.push('/contact')}
D. Missing parentheses when calling useRouter hook
Solution
Step 1: Check how useRouter is assigned
The code assigns const router = useRouter; without calling it as a function. It should be useRouter().
Step 2: Verify other parts
router.push is valid for navigation. onClick syntax is correct. Import path is correct.
Final Answer:
Missing parentheses when calling useRouter hook -> Option D
Quick Check:
useRouter must be called as a function [OK]
Hint: Always call useRouter() with parentheses [OK]
Common Mistakes:
Assigning useRouter without parentheses
Using router.push incorrectly in onClick
Importing useRouter from wrong module
5. You want to navigate to a new page without adding a new entry in the browser history (so the back button skips the current page). Which method of useRouter should you use and how?
const router = useRouter();
// Your code here
hard
A. Use router.push('/newpage') to add a new history entry
B. Use router.replace('/newpage') to replace current history entry
C. Use router.reload() to reload current page
D. Use router.back() to go back to previous page
Solution
Step 1: Understand difference between push and replace
router.push() adds a new entry to browser history, while router.replace() swaps the current entry.
Step 2: Choose method to avoid adding history entry
To navigate without adding a new history entry, use router.replace('/newpage').
Final Answer:
Use router.replace('/newpage') to replace current history entry -> Option B
Quick Check:
replace swaps history entry = Use router.replace('/newpage') to replace current history entry [OK]
Hint: Use router.replace() to avoid adding history entry [OK]
Common Mistakes:
Using router.push when replace is needed
Confusing reload with navigation
Using router.back instead of forward navigation
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.