Nextjs dynamic routes
/posts/[id]
- pages that begin with
[and end with]are dynamic routes in Nextjs.
the page file needs:
- a React component to render
export async getStaticPaths()which returns a list of possible values forid.export async getStaticProps({ params })to fetch the necessary data for the requestedid. the paramparamsis given, which containsid(bc the file is named[id].js).
Important: The returned list is not just an array of strings — it must be an array of objects that look like the comment above. Each object must have the params key and contain an object with the id key (because we’re using [id] in the file name). Otherwise, getStaticPaths will fail.
- in development
getStaticPathsrun on every req. In prod it runs at build time.fallbackis a param. that whenfalsereturns default404when given a route not returnded bygetStaticPaths- when
truethe behaviour ofgetStaticPropschanges: - The paths returned from getStaticPaths will be rendered to HTML at build time.
- The paths that have not been generated at build time will not result in a 404 page. Instead, Next.js will serve a "fallback" version of the page on the first request to such a path.
- In the background, Next.js will statically generate the requested path. Subsequent requests to the same path will serve the generated page, just like other pages pre-rendered at build time.
- when
- Dynamic routes can be extended to catch all paths by adding three dots (...) inside the brackets. For example:
pages/posts/[...id].js matches /posts/a, but also /posts/a/b, /posts/a/b/c and so on.
If you do this, ingetStaticPaths, you must return an array as the value of the id key like so:
return [
{
params: {
// Statically Generates /posts/a/b/c
id: ['a', 'b', 'c'],
},
},
//...
];
And params.id will be an array in getStaticProps:
export async function getStaticProps({ params }) {
// params.id will be like ['a', 'b', 'c']
}