Skip to content

Dynamic Routes

Page Path Depends on External Data

每个页面都依赖外部数据,使用动态路由

动态路由文件格式:pages/posts/[id].js

getStaticPaths

  • 开发环境:运行在每个请求
  • 生产环境:运行在构建阶段

paths 是一个 Array<Object> ,必须包含 key:id,对应 [id]

json
[
  {
    "params": {
      "id": "ssg-ssr"
    }
  },
  {
    "params": {
      "id": "pre-rendering"
    }
  }
]
javascript
// 添加动态路由
export async function getStaticPaths() {
  // Return a list of possible value for id
  const paths = getAllPostIds()
  return {
    paths,
    fallback: false
  }
}
// 根据路由参数获取数据
export async function getStaticProps({ params }) {
  const postData = getPostData(params.id)
  return {
    props: {
      postData
    }
  }
}

Dynamic Routes Details

fallback

  • false :没有被 getStaticPaths 返回的路径,显示 404 页面
  • true
    • 页面在构建时渲染
    • 没有的路径,不会显示 404。第一次访问,提供后备版本
    • 在后台,nextjs 生成 静态请求路由。随后的相同路径将服务于生成的页面

catch-all Routes

pages/posts/[...id].js

  • /post/a
  • /post/a/b
  • /post/a/b/c

捕获全部路由,必须换回一个数组 array

javascript
return [
  {
    params: {
      // Statically Generates /posts/a/b/c
      id: ['a', 'b', 'c']
    }
  }
  //...
]