Bird
Raised Fist0
NextJSframework~5 mins

Programmatic navigation (useRouter) in NextJS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is useRouter in Next.js?

useRouter is a React hook provided by Next.js that lets you access the router object. It helps you navigate pages programmatically and get info about the current route.

Click to reveal answer
beginner
How do you navigate to a new page using useRouter?
<p>You call <code>router.push('/path')</code> where <code>router</code> is the object from <code>const router = useRouter()</code>. This changes the page to the given path.</p>
Click to reveal answer
intermediate
What is the difference between router.push() and router.replace()?

router.push() adds a new entry in the browser history, so users can go back. router.replace() changes the page without adding a new history entry, replacing the current one.

Click to reveal answer
intermediate
How can you pass query parameters when navigating programmatically with useRouter?

You can pass an object to router.push() like router.push({ pathname: '/search', query: { q: 'books' } }). This adds ?q=books to the URL.

Click to reveal answer
beginner
Why use programmatic navigation instead of <Link> in Next.js?

Programmatic navigation is useful when you want to navigate after an event like form submission or button click, where you need to run code before changing pages.

Click to reveal answer
Which hook do you use in Next.js for programmatic navigation?
AuseLink
BuseNavigate
CuseHistory
DuseRouter
What does router.push('/about') do?
AReloads the current page
BNavigates to the /about page and adds to browser history
CNavigates to /about but replaces current history entry
DDoes nothing
How do you replace the current page without adding a new history entry?
Arouter.replace('/newpage')
Brouter.push('/newpage')
Crouter.goBack()
Drouter.reload()
How to add query parameters when navigating with useRouter?
Arouter.query({ q: 'books' })
Brouter.push('/search?q=books')
Crouter.push({ pathname: '/search', query: { q: 'books' } })
Drouter.navigate('/search', { q: 'books' })
When is programmatic navigation preferred over using <Link>?
AAfter an event like form submission
BFor static links in navigation menus
CWhen you want to reload the page
DNever, <code>&lt;Link&gt;</code> is always better
Explain how to use useRouter to navigate to a new page with query parameters in Next.js.
Think about how to pass both the page path and extra info in the URL.
You got /4 concepts.
    Describe the difference between router.push() and router.replace() in Next.js navigation.
    Consider how browser back button behaves after each method.
    You got /4 concepts.

      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

      1. Step 1: Understand the purpose of useRouter

        The useRouter hook provides methods to change pages in code, not by user clicking links.
      2. Step 2: Identify what useRouter does not do

        It does not handle data fetching, styling, or auto-reloading pages.
      3. Final Answer:

        Navigate between pages programmatically using code -> Option A
      4. 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

      1. 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.
      2. 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.
      3. Final Answer:

        import { useRouter } from 'next/navigation'; -> Option A
      4. 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

      1. 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.
      2. Step 2: Confirm the code triggers navigation on button click

        The button's onClick calls router.push correctly, so navigation happens as expected.
      3. Final Answer:

        The page will navigate to '/about' adding a new entry in browser history -> Option C
      4. 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:
      import { useRouter } from 'next/navigation';
      
      export default function Page() {
        const router = useRouter;
        return (
          <button onClick={() => router.push('/contact')}>Contact</button>
        );
      }
      medium
      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

      1. Step 1: Check how useRouter is assigned

        The code assigns const router = useRouter; without calling it as a function. It should be useRouter().
      2. Step 2: Verify other parts

        router.push is valid for navigation. onClick syntax is correct. Import path is correct.
      3. Final Answer:

        Missing parentheses when calling useRouter hook -> Option D
      4. 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

      1. Step 1: Understand difference between push and replace

        router.push() adds a new entry to browser history, while router.replace() swaps the current entry.
      2. Step 2: Choose method to avoid adding history entry

        To navigate without adding a new history entry, use router.replace('/newpage').
      3. Final Answer:

        Use router.replace('/newpage') to replace current history entry -> Option B
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard