0

我正在我的 Next js 网站上工作,我已将其设置"pages/[slug].js" getStaticPathstrue检查数据是否存在返回 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 },
4

0 回答 0