You can get in-depth information about dynamic routes in our documentation:
But here is some essential information you should know about dynamic routes.
Like getStaticProps, getStaticPaths can fetch data from any data source. In our example, getAllPostIds (which is used by getStaticPaths) may fetch from an external API endpoint:
export async function getAllPostIds() { // Instead of the file system, // fetch post data from an external API endpoint const res = await fetch('..') const posts = await res.json() return posts.map(post => { return { params: { id: post.id } } }) }
npm run dev or yarn dev), getStaticPaths runs on every request.getStaticPaths runs at build time.Recall that we returned fallback: false from getStaticPaths. What does this mean?
If fallback is false, then any paths not returned by getStaticPaths will result in a 404 page.
If fallback is true, then the behavior of getStaticProps changes:
getStaticPaths will be rendered to HTML at build time.This is beyond the scope of our lessons, but you can learn more about fallback: true in our documentation.
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, in getStaticPaths, 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'] }
Take a look at our Dynamic Routes documentation to learn more.
If you want to access the Next.js router, you can do so by importing the useRouter hook from next/router. Take a look at our router documentation to learn more.
To create a custom 404 page, create pages/404.js. This file is statically generated at build time.
// pages/404.js export default function Custom404() { return <h1>404 - Page Not Found</h1> }
Take a look at our Error Pages documentation to learn more.
We have created several examples to illustrate getStaticProps and getStaticPaths — take a look at their source code to learn more:
In the next lesson, we’ll talk about the API Routes feature for Next.js.