Challenge - 5 Problems
Catch-All Route Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate2:00remaining
What is the output when accessing /docs/2024/06 in a catch-all route?
Given a Next.js catch-all route file named
What will be rendered when visiting
app/docs/[...slug]/page.tsx with this code:export default function Page({ params }) {
return {JSON.stringify(params.slug)}
}What will be rendered when visiting
/docs/2024/06?NextJS
export default function Page({ params }) { return <p>{JSON.stringify(params.slug)}</p> }
Attempts:
2 left
💡 Hint
Catch-all routes collect all path segments into an array under the param name.
✗ Incorrect
In Next.js catch-all routes, the parameter is an array of all matched segments. So /docs/2024/06 sets params.slug to ["2024", "06"].
📝 Syntax
intermediate1:30remaining
Which file name correctly defines a catch-all route in Next.js?
You want to create a catch-all route that matches any path under /blog/. Which file name is correct?
Attempts:
2 left
💡 Hint
Catch-all routes use three dots inside square brackets before the param name.
✗ Incorrect
The correct syntax for catch-all routes is [...param]. So the file must be named [...slug].
❓ state_output
advanced2:00remaining
What is the value of params.slug for /shop/electronics/phones in a catch-all route?
Consider a Next.js catch-all route
What will be rendered when visiting
app/shop/[...slug]/page.tsx with this code:export default function Page({ params }) {
return {Array.isArray(params.slug) ? params.slug.length : 'no slug'}
}What will be rendered when visiting
/shop/electronics/phones?NextJS
export default function Page({ params }) { return <p>{Array.isArray(params.slug) ? params.slug.length : 'no slug'}</p> }
Attempts:
2 left
💡 Hint
Count how many segments are after /shop/ in the URL.
✗ Incorrect
The URL /shop/electronics/phones has three segments after /shop/: 'electronics', 'phones'. So params.slug is an array of length 3.
🔧 Debug
advanced2:30remaining
Why does params.slug return undefined in a catch-all route?
You created
But when visiting
app/products/[[...slug]]/page.tsx with this code:export default function Page({ params }) {
return {params.slug.join('-')}
}But when visiting
/products (no extra path), it crashes with TypeError: Cannot read properties of undefined (reading 'join'). Why?NextJS
export default function Page({ params }) { return <p>{params.slug.join('-')}</p> }
Attempts:
2 left
💡 Hint
Check what happens when no path segments are matched in a catch-all route.
✗ Incorrect
When no segments are matched, params.slug is undefined, so calling join on it causes an error.
🧠 Conceptual
expert3:00remaining
How does Next.js differentiate between optional and required catch-all routes?
In Next.js routing, what is the difference between
[...param] and [[...param]] in file names?Attempts:
2 left
💡 Hint
Think about whether the route matches when no extra path is given.
✗ Incorrect
The single bracket catch-all
[...param] requires at least one segment. The double bracket [[...param]] makes the catch-all optional, matching zero or more segments.