在 Next.js 中出现“未在 getStaticPaths 中以字符串形式提供必需参数 (id)”错误

新手上路,请多包涵

我对 getStaticPaths 函数有疑问。当我尝试使用参数获得动态显示时,它显示为错误: 在 getStaticPaths for / movies / [id] 中未提供必需参数 (id) 作为字符串, 但如果我使用上面的其他方式,它会起作用。最重要的是,我是文档。

 import fetch from 'node-fetch';

function MovieSelect({movie}){

    return(
        <div>
            <h1>Test: {movie.name}</h1>
            <p>{movie.summary.replace(/<[/]?[pb]>/g, '')}</p>
            {movie.image ? <img src={movie.image.medium} /> : null}
        </div>
    )
}

export async function getStaticPaths(){
    const request  = await fetch('https://api.tvmaze.com/search/shows?q=batman')
    const movies = await request.json()

    //const paths = movies.map(movie =>`/movies/${movie.show.id}`)

    const paths = movies.map(movie =>({
        params: {id: movie.show.id},
    }))

    return {
        paths,
        fallback: false
    }
}

export async function getStaticProps({params}){
    const request = await fetch(`https://api.tvmaze.com/shows/${params.id}`)
    const movie = await request.json()

    return{
        props:{
            movie
        }
    }
}

export default MovieSelect

原文由 Julien 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 273
2 个回答

/movies/[id] 的 getStaticPaths 中未提供必需参数 (id) 作为 字符串

id 应该是错误提示的字符串。从浏览器中点击 api 后,您可以看到 id 不是字符串而是数字。您需要将其转换为字符串。

 params: {id: movie.show.id.toString()},

原文由 Hassaan Tauqir 发布,翻译遵循 CC BY-SA 4.0 许可协议

我的问题产生了同样的错误,但我有一个不同的错误。

TL;DR:我的文件名需要与 params 对象中使用的 slug 的键相匹配。

就我而言,我的文件名为 [postSlug].js 。因此,密钥应该是 postSlug 内部 getStaticPaths()

 // In [postSlug].js

const pathsWithParams = slugs.map((slugs) => ({ params: { postSlug: slug } })); // <-- postSlug is right
const pathsWithParams = slugs.map((slugs) => ({ params: { id: slug } })); // <--- id is wrong

我的整个功能看起来像这样

export async function getStaticPaths() {
    const slugs = await getAllBlogSlugs();
    const pathsWithParams = slugs.map((slug) => ({ params: { postSlug: slug } }));

    return {
        paths: pathsWithParams,
        fallback: "blocking",
    };
}

参考:

原文由 Dani Amsalem 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题