Jul*_*ien 14 api reactjs next.js
我的“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
Run Code Online (Sandbox Code Playgroud)
Has*_*qir 27
在 getStaticPaths for / movies / [id] 中,没有以字符串形式提供必需的参数 (id)
id 应该是错误建议的字符串。从浏览器点击 api 后,您可以看到 id 不是字符串而是数字。您需要将其转换为字符串。
params: {id: movie.show.id.toString()},
Run Code Online (Sandbox Code Playgroud)
我的问题产生了同样的错误,但我有一个不同的错误。
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
Run Code Online (Sandbox Code Playgroud)
我的整个功能看起来像这样
export async function getStaticPaths() {
const slugs = await getAllBlogSlugs();
const pathsWithParams = slugs.map((slug) => ({ params: { postSlug: slug } }));
return {
paths: pathsWithParams,
fallback: "blocking",
};
}
Run Code Online (Sandbox Code Playgroud)
参考: