我正在我的 Next js 网站上工作,我已将其设置"pages/[slug].js"
getStaticPaths
为true
检查数据是否存在返回 404。
但是由于某种原因,它只是跳过了回退和数据检查并尝试返回数据。我不确定为什么。
是什么导致了这个问题?它的工作原理非常简单,但只是无法正常工作。
我的代码:
import ErrorPage from 'next/error'
import { useRouter } from 'next/router'
import { groq } from 'next-sanity'
import { getClient, usePreviewSubscription, PortableText } from '@lib/sanity'
const pageQuery = groq`
*[_type == "page" && slug.current == $slug][0] {
_id,
title,
body,
publishedAt,
openGraphImage,
openGraphAlt,
openGraphDescription,
featuredImage,
"slug": slug.current,
"author": author -> {name, picture},
}
`
const Page = ({ data, preview }) => {
const router = useRouter()
if (!router.isFallback && !data) {
return <ErrorPage statusCode={404} />
}
const {
title,
author,
featuredImage,
publishedAt,
body,
openGraphImage,
openGraphAlt,
openGraphDescription,
slug
} = data.page
const { data: page } = usePreviewSubscription(pageQuery, {
params: { slug: data.page.slug },
initialData: data,
enabled: preview
})
return (
<div>
<h1>{title}</h1>
{body && <PortableText blocks={body} />}
</div>
)
}
export default Page
export const getStaticProps = async ({ params, preview = false }) => {
const page = await getClient(preview).fetch(pageQuery, {
slug: params.slug
})
return {
props: {
preview: true,
data: {
page
}
}
}
}
export const getStaticPaths = async () => {
const paths = await getClient().fetch(
groq`*[_type == "page" && defined(slug.current)][].slug.current`
)
return {
paths: paths.map((slug) => ({ params: { slug } })) || null,
fallback: true
}
}
错误:
pages/[slug].js (38:12) @ Page
36 | openGraphDescription,
37 | slug
> 38 | } = data.page
| ^
39 |
40 | const { data: page } = usePreviewSubscription(pageQuery, {
41 | params: { slug: data.page.slug },