问题描述
在Next.js中生成动态页面时遇到了问题。我正在从Sanity中提取数据,我想我的代码正确,但是每次尝试加载页面时,我都会遇到类型错误-“'id'参数必须为字符串类型。收到空值”。文件路径为‘/post/[slug].js’
,所以这是我在整个过程中使用的变量名-我不确定id的来源,或者我是否需要传递ID,或者我没有传递ID没事吧!
我已经在Sanity论坛上问过了,这似乎不是API问题-我可以毫无问题地提取应用程序其他部分的数据。在控制台中,页面似乎编译成功,但是在尝试加载页面时出现此错误。我在页面组件中使用了一个空的div进行了尝试,以确保在演示逻辑中没有任何问题,并且没有运气。
我已将完整的错误消息放在gist中,它看起来像是带有开玩笑的服务器或下一台服务器。对于我的一生,我无法弄清楚!
import client from '../../client’
const Post = ({ post }) => {
...
}
export default Post
export const getStaticPaths = async () => {
const posts = await client.fetch(`*[_type == "blog"]{ slug }`)
const paths = posts.map(post => ({
params: {
slug: post.slug.current
}
}))
return {
paths,fallback: false }
}
export const getStaticProps = async ({ params }) => {
const post = await client.fetch(`*[_type == "blog" && slug.current == $slug]{ title,date,link,excerpt,body,slug }[0]`,{slug: params.slug})
return {
props: { post }
}
}
更新:play.js或它使用的配置似乎都存在问题-在台式机环境中尝试不会导致相同的错误。
解决方法
我认为问题在于您的文件名。名称仅应为[slug].js
,应位于pages/post
中。当您通过URL http://localhost:xxx/post/pulled-sanity-slug