Bird
Raised Fist0
NextJSframework~20 mins

Dynamic route segments in NextJS - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Dynamic Route Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is rendered by this dynamic route component?
Consider a Next.js app with a file named app/products/[id]/page.jsx containing this code:

export default function ProductPage({ params }) {
  return <h1>Product ID: {params.id}</h1>
}

What will be the rendered output when visiting /products/42?
NextJS
export default function ProductPage({ params }) {
  return <h1>Product ID: {params.id}</h1>
}
A<h1>Product ID: 42</h1>
B<h1>Product ID: params.id</h1>
C<h1>Product ID: undefined</h1>
DError: params is undefined
Attempts:
2 left
💡 Hint
Remember that Next.js passes dynamic segment values inside the params object.
📝 Syntax
intermediate
1:30remaining
Which code correctly defines a dynamic route segment in Next.js?
You want to create a dynamic route for blog posts by ID. Which file name correctly defines this dynamic segment?
Aapp/blog/[postId]/page.jsx
Bapp/blog/{postId}/page.jsx
Capp/blog/:postId/page.jsx
Dapp/blog/postId/page.jsx
Attempts:
2 left
💡 Hint
Next.js uses square brackets to mark dynamic segments in file names.
state_output
advanced
2:30remaining
What is the value of params in this nested dynamic route?
Given a Next.js app with the file app/users/[userId]/posts/[postId]/page.jsx containing:

export default function PostPage({ params }) {
  return 
{JSON.stringify(params)}
}

What will be the JSON string rendered when visiting /users/7/posts/15?
NextJS
export default function PostPage({ params }) {
  return <pre>{JSON.stringify(params)}</pre>
}
A{}
B{"userId":"7","postId":"15"}
C{"postId":"15"}
D{"userId":"7/posts/15"}
Attempts:
2 left
💡 Hint
Each dynamic segment in the path becomes a key in params with the matched value.
🔧 Debug
advanced
2:30remaining
Why does this dynamic route component cause an error?
This Next.js dynamic route component is in app/profile/[username]/page.jsx and contains:

export default function Profile({ params }) {
  return 

Welcome, {params.user}!

}

Visiting /profile/alice causes an error. Why?
NextJS
export default function Profile({ params }) {
  return <h2>Welcome, {params.user}!</h2>
}
AThe component must use useRouter() hook to access params.
Bparams is undefined because it is not passed to the component.
Cparams.user is undefined because the dynamic segment is named 'username', not 'user'.
DDynamic routes cannot have more than one segment.
Attempts:
2 left
💡 Hint
Check the dynamic segment name in the file path and how it matches params keys.
🧠 Conceptual
expert
3:00remaining
How does Next.js handle optional catch-all dynamic routes?
In Next.js, you create a file app/docs/[...slug]/page.jsx to catch all routes under /docs. What is the value of params.slug when visiting /docs (no extra path)?
A[''] (an array with an empty string)
Bundefined
Cnull
D[] (an empty array)
Attempts:
2 left
💡 Hint
Optional catch-all routes provide an array of segments or an empty array if none.

Practice

(1/5)
1. In Next.js, what does a file named [id].js inside the pages folder represent?
easy
A. A configuration file for setting environment variables
B. A static page that only matches the URL /id
C. A special API route for handling requests with an id parameter
D. A dynamic route segment that matches any value in the URL at that position

Solution

  1. Step 1: Understand Next.js routing conventions

    Files inside the pages folder define routes. Square brackets [] indicate dynamic segments.
  2. Step 2: Interpret [id].js meaning

    The file [id].js matches any URL segment in that position and passes it as a parameter named id.
  3. Final Answer:

    A dynamic route segment that matches any value in the URL at that position -> Option D
  4. Quick Check:

    Dynamic route = [segment] [OK]
Hint: Square brackets mean dynamic URL part in Next.js routes [OK]
Common Mistakes:
  • Thinking [id].js is a static page
  • Confusing dynamic routes with API routes
  • Assuming it matches only the literal 'id'
2. Which of the following is the correct syntax to define a dynamic route segment for a Next.js page that captures a username?
easy
A. pages/:username.js
B. pages/username.js
C. pages/[username].js
D. pages/{username}.js

Solution

  1. Step 1: Recall Next.js dynamic route syntax

    Dynamic segments use square brackets around the parameter name inside the pages folder.
  2. Step 2: Match syntax for username parameter

    The correct syntax is [username].js to capture the username dynamically.
  3. Final Answer:

    pages/[username].js -> Option C
  4. Quick Check:

    Dynamic segment uses [param] syntax [OK]
Hint: Use square brackets for dynamic route names [OK]
Common Mistakes:
  • Using colon or curly braces instead of square brackets
  • Naming the file without brackets for dynamic routes
  • Confusing dynamic routes with static filenames
3. Given the file structure:
pages/blog/[slug].js
and the URL /blog/hello-world, what will be the value of the slug parameter inside the page component?
medium
A. "hello-world"
B. "blog"
C. "[slug]"
D. undefined

Solution

  1. Step 1: Identify dynamic segment from file name

    The file [slug].js captures the URL segment after /blog/ as slug.
  2. Step 2: Match URL segment to parameter

    For URL /blog/hello-world, the segment hello-world is assigned to slug.
  3. Final Answer:

    "hello-world" -> Option A
  4. Quick Check:

    URL segment after folder = slug value [OK]
Hint: Dynamic segment captures URL part matching filename [OK]
Common Mistakes:
  • Using folder name as parameter value
  • Assuming parameter is the literal filename
  • Expecting undefined if parameter not explicitly passed
4. Consider this Next.js dynamic route file: pages/product/[id].js. Which of the following code snippets correctly accesses the id parameter inside the component?
medium
A. const router = useRouter(); const { id } = router.query;
B. const { id } = props.params;
C. const id = useParams().id;
D. const id = getIdFromUrl();

Solution

  1. Step 1: Recall how to access route params in Next.js pages

    Next.js uses the useRouter hook from next/router to access query parameters.
  2. Step 2: Identify correct syntax for extracting id

    The correct way is const router = useRouter(); const { id } = router.query;.
  3. Final Answer:

    const router = useRouter(); const { id } = router.query; -> Option A
  4. Quick Check:

    useRouter().query gives dynamic params [OK]
Hint: Use useRouter().query to get dynamic route params [OK]
Common Mistakes:
  • Using props.params which is not standard in Next.js pages
  • Using useParams() which is from React Router, not Next.js
  • Calling undefined functions like getIdFromUrl()
5. You want to create a nested dynamic route in Next.js to handle URLs like /dashboard/user/123 where 123 is a user ID. Which file structure correctly implements this?
hard
A. pages/dashboard/[user]/[id].js
B. pages/dashboard/user/[id].js
C. pages/dashboard/[id].js
D. pages/[dashboard]/user/[id].js

Solution

  1. Step 1: Analyze the URL structure

    The URL /dashboard/user/123 has three segments: dashboard, user, and a dynamic id.
  2. Step 2: Match file structure to URL segments

    Static segments dashboard and user are folders, and [id].js captures the dynamic user ID.
  3. Step 3: Verify options

    pages/dashboard/user/[id].js matches the folder structure exactly. Options B and D incorrectly treat static parts as dynamic. pages/dashboard/[id].js misses the user folder.
  4. Final Answer:

    pages/dashboard/user/[id].js -> Option B
  5. Quick Check:

    Static folders + [id].js for dynamic segment [OK]
Hint: Match URL parts to folders; dynamic parts use [param].js [OK]
Common Mistakes:
  • Making static parts dynamic segments
  • Omitting intermediate folders for static URL parts
  • Confusing order of folders and dynamic files