Bird
Raised Fist0
NextJSframework~10 mins

Dynamic route segments in NextJS - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a dynamic route file for a user profile page.

NextJS
pages/[1].js
Drag options to blanks, or click blank then click option'
A{userId}
BuserId
C(userId)
D[userId]
Attempts:
3 left
💡 Hint
Common Mistakes
Using curly braces or parentheses instead of square brackets.
Not using any brackets, which creates a static route.
2fill in blank
medium

Complete the React component to access the dynamic route parameter using Next.js hooks.

NextJS
import { useRouter } from 'next/router';

export default function Profile() {
  const router = useRouter();
  const [1] = router.query.userId;

  return <p>User ID: {userId}</p>;
}
Drag options to blanks, or click blank then click option'
Aparams
Bid
CuserId
DqueryId
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different variable name than the dynamic segment.
Trying to destructure router.query incorrectly.
3fill in blank
hard

Fix the error in the dynamic route component to correctly handle the case when the router is not ready.

NextJS
import { useRouter } from 'next/router';

export default function Post() {
  const router = useRouter();
  if (!router.isReady) return <p>Loading...</p>;
  const postId = router.query.[1];
  return <p>Post ID: {postId}</p>;
}
Drag options to blanks, or click blank then click option'
Aid
BpostId
Cslug
Dpost
Attempts:
3 left
💡 Hint
Common Mistakes
Using a different name than the dynamic segment in the query.
Not checking if the router is ready before accessing query.
4fill in blank
hard

Fill all three blanks to create a dynamic route segment and access its parameter in the component.

NextJS
import { useRouter } from 'next/router';

export default function Product() {
  const router = useRouter();
  const [1] = router.query.[2];
  return <p>Product ID: {productId}</p>;
}

// File path: pages/[3].js
Drag options to blanks, or click blank then click option'
AproductId
Bid
C[productId]
Dproduct
Attempts:
3 left
💡 Hint
Common Mistakes
Using different names for the file and query parameter.
Not using square brackets in the file name.
5fill in blank
hard

Fill all three blanks to create a nested dynamic route and access both parameters in the component.

NextJS
import { useRouter } from 'next/router';

export default function Review() {
  const router = useRouter();
  const [1] = router.query.[2];
  const [3] = router.query.reviewId;
  return <p>Product: {productId}, Review: {reviewId}</p>;
}

// File path: pages/products/[productId]/reviews/[reviewId].js
Drag options to blanks, or click blank then click option'
AproductId
CreviewId
Did
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up parameter names or missing one.
Not matching the dynamic segment names exactly.

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