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
Dynamic Route Segments in Next.js
📖 Scenario: You are building a blog website using Next.js. Each blog post has a unique ID, and you want to create pages that show the content of each post dynamically based on the URL.
🎯 Goal: Create a dynamic route segment in Next.js to display blog post details based on the post ID from the URL.
📋 What You'll Learn
Create a data structure with blog posts and their details
Add a configuration variable for the default post ID
Use Next.js dynamic route segment to fetch the post ID from the URL
Display the blog post title and content dynamically on the page
💡 Why This Matters
🌍 Real World
Dynamic route segments let websites show different content pages based on URL parts, like user profiles or blog posts.
💼 Career
Understanding dynamic routes is essential for building modern web apps with Next.js, a popular React framework used in many companies.
Progress0 / 4 steps
1
Create blog posts data
Create a constant called posts that is an object with these exact entries: "1": { title: "First Post", content: "This is the first post." }, "2": { title: "Second Post", content: "This is the second post." }, and "3": { title: "Third Post", content: "This is the third post." }.
NextJS
Hint
Use a constant object named posts with keys as strings "1", "2", and "3".
2
Add default post ID configuration
Create a constant called defaultPostId and set it to the string "1".
NextJS
Hint
Define a constant defaultPostId with the value "1" as a string.
3
Create dynamic route component
Create a default exported React functional component called PostPage that uses the Next.js useRouter hook to get the postId from router.query. Use defaultPostId if postId is undefined. Then get the post data from posts[postId].
NextJS
Hint
Use useRouter to get postId from router.query. Use ?? to fallback to defaultPostId.
4
Add dynamic route file and export
Create a file named [postId].jsx inside the app directory and place the PostPage component code inside it. Ensure the file exports the PostPage component as default.
NextJS
Hint
Save this component in a file named [postId].jsx inside the app folder to enable dynamic routing.
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
The file [id].js matches any URL segment in that position and passes it as a parameter named id.
Final Answer:
A dynamic route segment that matches any value in the URL at that position -> Option D
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
Step 1: Recall Next.js dynamic route syntax
Dynamic segments use square brackets around the parameter name inside the pages folder.
Step 2: Match syntax for username parameter
The correct syntax is [username].js to capture the username dynamically.
Final Answer:
pages/[username].js -> Option C
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
Step 1: Identify dynamic segment from file name
The file [slug].js captures the URL segment after /blog/ as slug.
Step 2: Match URL segment to parameter
For URL /blog/hello-world, the segment hello-world is assigned to slug.
Final Answer:
"hello-world" -> Option A
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
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.
Step 2: Identify correct syntax for extracting id
The correct way is const router = useRouter(); const { id } = router.query;.
Final Answer:
const router = useRouter(); const { id } = router.query; -> Option A
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
Step 1: Analyze the URL structure
The URL /dashboard/user/123 has three segments: dashboard, user, and a dynamic id.
Step 2: Match file structure to URL segments
Static segments dashboard and user are folders, and [id].js captures the dynamic user ID.
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.
Final Answer:
pages/dashboard/user/[id].js -> Option B
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