📖 Scenario: You are building a simple blog website using Next.js. Each blog post has a unique ID. You want to create pages that show the content of each post based on its ID in the URL.
🎯 Goal: Build dynamic routes using the [param] folder naming in Next.js to display blog post content based on the post ID from the URL.
📋 What You'll Learn
Create a data structure with blog posts and their content
Add a configuration variable for the default post ID
Create a dynamic route file using [id] folder naming
Fetch and display the blog post content based on the dynamic id parameter
💡 Why This Matters
🌍 Real World
Dynamic routes let websites show different content based on URL parts, like user profiles or product pages.
💼 Career
Understanding dynamic routing is essential for building modern web apps with Next.js, a popular React framework.
Progress0 / 4 steps
1
Create blog posts data
Create a constant called posts as an object with these exact entries: "1": "Welcome to Next.js!", "2": "Learning dynamic routes.", and "3": "Building cool apps."
NextJS
Hint
Use a JavaScript object with string keys for post IDs and string values for content.
2
Add default post ID
Create a constant called defaultPostId and set it to the string "1".
NextJS
Hint
Use a constant string variable for the default post ID.
3
Create dynamic route component
Create a React functional component called PostPage that accepts a params object with an id property. Inside the component, get the post content from posts[params.id] or use posts[defaultPostId] if undefined. Return a <main> element with a <h1> showing "Post ID: " plus the id, and a <p> showing the post content.
NextJS
Hint
Use the nullish coalescing operator ?? to provide a fallback post content.
4
Add dynamic route file structure
Create a file named app/posts/[id]/page.js and place the PostPage component code inside it. Export the component as default. This will enable dynamic routing based on the id parameter in the URL.
NextJS
Hint
Dynamic route files in Next.js use square brackets around the parameter name in the folder or file name.
Practice
(1/5)
1. What does the file name [id].js inside the pages folder in Next.js represent?
easy
A. A static page named literally 'id'
B. A dynamic route where id is a variable part of the URL
C. A special API route for handling requests
D. A CSS module file for styling
Solution
Step 1: Understand Next.js dynamic route naming
Files with names in square brackets like [id].js represent dynamic routes where the part inside brackets is a variable.
Step 2: Interpret the meaning of [id].js
This means the URL can have any value in place of id, and the page will render accordingly.
Final Answer:
A dynamic route where id is a variable part of the URL -> Option B
Quick Check:
Dynamic route = [param] file name [OK]
Hint: Square brackets mean dynamic URL part [OK]
Common Mistakes:
Thinking it's a static page named 'id'
Confusing with API routes
Assuming it's a styling file
2. Which of the following is the correct way to access the dynamic parameter slug in a Next.js page component inside pages/[slug].js?
easy
A. const { slug } = props.params;
B. const slug = params.slug;
C. const slug = useRouter().query.slug;
D. const slug = window.location.slug;
Solution
Step 1: Recall how to get dynamic params in Next.js client-side
Next.js provides the useRouter hook to access route parameters via router.query.
Step 2: Identify correct syntax
The correct way is const slug = useRouter().query.slug; to get the dynamic slug value.
Hint: Use useRouter().query.param for dynamic params [OK]
Common Mistakes:
Trying to destructure from props.params directly
Using window.location which doesn't have slug
Using undefined variable params
3. Given the file pages/blog/[postId].js with this code:
import { useRouter } from 'next/router';
export default function Post() {
const router = useRouter();
return <div>Post ID: {router.query.postId}</div>;
}
What will be rendered when the user visits /blog/42?
medium
A. Post ID: postId
B. Error: router is undefined
C. Post ID: undefined
D. Post ID: 42
Solution
Step 1: Understand dynamic route matching
The file [postId].js matches URLs like /blog/42 and sets postId to '42'.
Step 2: Check how router.query.postId is used
The component uses router.query.postId to display the dynamic value, so it will show '42'.
Final Answer:
Post ID: 42 -> Option D
Quick Check:
Dynamic param value shown = 42 [OK]
Hint: router.query.param shows URL dynamic value [OK]
Common Mistakes:
Expecting literal 'postId' string output
Assuming undefined because of initial render
Thinking router is not defined
4. You have a dynamic route file pages/product/[productId].js. The component tries to access params.productId directly but gets an error. What is the likely cause?
medium
A. The component should use useRouter().query.productId instead of params.productId
B. The file name should be productId.js without brackets
C. Dynamic routes do not support parameters
D. You must import params from 'next/params'
Solution
Step 1: Identify how to access dynamic params in client components
In Next.js, dynamic route params are accessed via useRouter().query in client components, not directly from params.
Using params.productId without proper context or props causes undefined errors.
Final Answer:
The component should use useRouter().query.productId instead of params.productId -> Option A
Quick Check:
Use useRouter().query for dynamic params [OK]
Hint: Use useRouter().query, not params directly [OK]
Common Mistakes:
Trying to access params without props or hooks
Renaming file incorrectly
Expecting automatic import of params
5. You want to create a dynamic route in Next.js that matches URLs like /user/123/profile. Which folder and file structure inside app directory correctly implements this using dynamic segments?