我遇到了使用getStaticPaths
和getStaticProps
生成博客页面的情况,现在,由于我们希望创建新页面并在网站上提供这些页面,而无需重新启动服务器,我尝试在getStaticPaths
中启用fallback
export async function getStaticPaths() {
const paths = ...code to get paths...
return {
paths: paths,
fallback: true
};
}
然后在getStaticProps
中
export async function getStaticProps({ params }) {
try {
const post = await fetchPost(...someid...);
return {
props: {
post
},
revalidate: 60
};
} catch (e) {
return {
notFound: true
};
}
}
到目前为止一切顺利!
如果我运行yarn build
,然后运行yarn start
,用/somenewslug
创建一个新页面,然后我尝试打开该页面,它就会生成!Woohoo!到目前为止一切顺利。
然而,有一个边缘的情况下,我不知道如何处理。
边缘情况是,如果我尝试打开/somenewslug
在实际页面创建之前,那么当页面不存在时,getStaticProps
将返回notFound
(这是正确的!对于这个时间点),当我在此之后创建页面时,它将不工作,它将一直给我404,并且不尝试重新获取它,但页面现在存在。
我也试过将X1 M11 N1 X与X1 M12 N1 X一起添加(不知道这是否可行),但它没有改变任何东西。
我正在处理的后备:
const SlugPage: NextPage<any> = props => {
const theme = useTheme();
const router = useRouter();
if (router.isFallback)
return (
<Loader
colors={{
backgroundColor: theme.colors.earth.second,
color: theme.colors.earth.fifth
}}
loading={true}
/>
);
...rest of normal page...
型
1条答案
按热度按时间hc8w905p1#
答案是将
revalidate
与notFound
一起使用。