Next.js 静态站点的动态路由?
我打算使用Airtable作为一个简单的数据库,将我制作的项目添加到我的投资组合网站中 我已经成功地获取并显示了项目,并将其发送到每个项目ID。但是,我仍然无法确定如何从该特定项目中获取其他数据并进行显示。静态地 从Airtable功能获取数据:Next.js 静态站点的动态路由?,next.js,Next.js,我打算使用Airtable作为一个简单的数据库,将我制作的项目添加到我的投资组合网站中 我已经成功地获取并显示了项目,并将其发送到每个项目ID。但是,我仍然无法确定如何从该特定项目中获取其他数据并进行显示。静态地 从Airtable功能获取数据: export async function getProjectsData() { const res = await fetch( `https://api.airtable.com/v0/${BASE_KEY}/Projects?api
export async function getProjectsData() {
const res = await fetch(
`https://api.airtable.com/v0/${BASE_KEY}/Projects?api_key=${API_KEY}`
);
const airtable = await res.json();
const projectData = await airtable.records
.map(record => {
return {
name: record.fields.Name,
notes: record.fields.Notes,
siteURL: record.fields.SiteURL,
codeURL: record.fields.CodeURL,
screenshots: record.fields.Screenshots.map(img => img.url),
tech: record.fields.Tech,
id: record.fields.ID,
};
})
.sort((a, b) => {
if (a.id < b.id) {
return -1;
} else return 1;
});
return projectData;
}
我的问题是,我希望使用动态路由和SSG在项目页面上显示其余的项目数据。我已经看过文件了
任何帮助都将不胜感激 你想让
[id].js
正常工作吗?您是否已将getStaticProps
添加到[id].js
以使用项目id(即context.params.id
)查询Airtable?(context
是getStaticProps
的参数)类似于上面的注释:[id].js-inside-pages/应该只用于数据获取,我会将我的项目页面模板存储在components/中。在[id].js中,您将有一个getStaticProps,在其中您将从参数中读取项目的id。然后,您可以创建一个与getProjects类似的函数,该函数使用项目id获取项目数据。您是否要让[id].js
正常工作?您是否已将getStaticProps
添加到[id].js
以使用项目id(即context.params.id
)查询Airtable?(context
是getStaticProps
的参数)类似于上面的注释:[id].js-inside-pages/应该只用于数据获取,我会将我的项目页面模板存储在components/中。在[id].js中,您将有一个getStaticProps,在其中您将从参数中读取项目的id。然后,您可以创建一个与getProjects类似的函数,该函数使用项目id获取项目数据
<ul>
{projects.map((project, index) => (
<li key={index}>
<h3>{project.name}</h3>
<Link href='/projects/[id]' as={`/projects/${project.id}`}>
<a>Find out more</a>
</Link>
</li>
))}
</ul>
</div>
</main>
</div>
);
}
export async function getStaticProps() {
const projects = await getProjectsData();
return {
props: {
projects,
},
};
}
export default function Project() {
return (
<div>
<h1>This is a project</h1>
<Link href='/'>
<a>Home</a>
</Link>
</div>
);
}