cbd*_*per 3 javascript typescript reactjs next.js static-site-generation
我正在编写以下代码:
这是一个blogPost动态页面:/post/[slug].tsx
export const getStaticPaths: GetStaticPaths = async () => {
const allSlugs = await getAllSlugs();;
return ({
paths: allSlugs.map((slug) => ({ params: { slug }})),
fallback: "blocking"
});
};
export const getStaticProps: GetStaticProps = async (context) => {
const slug = context.params.slug;
const blogPost = getBlogPostFromSlug({slug});
return ({
props: {
blogPost
}
});
};
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
看来该GetStaticProps类型是通用的,可以针对我的类型进行自定义。
我创建了这两种类型来尝试自定义GetStaticProps类型:
type ContextParams = {
slug: string
}
type PageProps = {
blogPost: null | Types.BlogPost.Item
}
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试的:
export const getStaticProps: GetStaticProps<PageProps,ContextParams> = async (context) => {
const slug = context.params.slug;
const blogPost = await getBlogPostFromSlug({slug});
return ({
props: {
blogPost
}
});
};
Run Code Online (Sandbox Code Playgroud)
但它仍然认为这params可能是未定义的。我应该只是处理它吗?从上面的代码来看,似乎params是未定义的?我没想到会这样。
定义类型时,即使您声明 params 的类型,params变量也必须保持不变。从类型文件中:undefinedQ
export type GetStaticPropsContext<Q extends ParsedUrlQuery = ParsedUrlQuery> = {
params?: Q
...
Run Code Online (Sandbox Code Playgroud)
因此,如果您想安全,那么您应该假设您可能没有params。我将使用此处解释的notFound或redirect属性来处理缺少 的请求。您还想处理您的函数被拒绝的情况。paramsasyncgetBlogPostFromSlug
export const getStaticProps: GetStaticProps<PageProps, ContextParams> = async (
context
) => {
const slug = context.params?.slug;
if (slug) {
try {
const blogPost = await getBlogPostFromSlug({ slug });
return {
props: {
blogPost
}
};
} catch (error) { }
}
return {
notFound: true
};
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3933 次 |
| 最近记录: |