官方解释
Next.js 允许你创建具有 动态路由 的页面。例如,你可以创建一个名为
pages/posts/[id].js
的文件用以展示以id
标识的单篇博客文章。当你访问posts/1
路径时将展示id: 1
的博客文章。
代码
这里先用一个写好的实例代码来展示
javascript
import React from 'react';
// 步骤1
export async function getStaticPaths() {
// 模拟调用外部 API 获取博文列表
const posts = [
{ id: 1 },
{ id: 2 },
{ id: 3 }
];
// 根据博文列表生成所有需要预渲染的路径
const paths = posts.map((post) => ({
params: { id: post.id.toString() }
}));
// 返回需要预渲染的路径和fallback配置
return { paths, fallback: false };
}
// 步骤2
export async function getStaticProps({ params }) {
// 使用params中的id获取特定博文数据,这里只是模拟数据
const postData = { id: params.id, title: 'Post Title', content: 'Post Content' };
return {
props: {
postData
}
};
}
// 渲染页面
function Post({ postData }) {
return (
<div>
<h1>{postData.title}</h1>
<h1>{postData.id}</h1>
<p>{postData.content}</p>
</div>
);
}
export default Post;
我们依次访问一下路径
http://localhost:3000/post/1
不难发现每次渲染的都是不同页面,这就是动态路由,能够根据你传来的数字显示不同的页面
他和传统的动态路由不同,next.js的实现方式很简单:
下面是我这个页面的文件目录
可以看见我的文件名字是[id].js,这个是next.js规定的

getStaticPaths 是给我们定义一个路径,也就是当我们访问http://localhost:3000/post/1的时候,文件中没有这个名字,但是也能访问的到
getStaticProps是用来给我们的页面传参的
function Post({ postData })中的postData是接收getStaticProps传来的参数
其余的都在上面的代码中,看一下很容易就能够理解运用起来