4 回答
TA贡献1876条经验 获得超6个赞
那是因为 response 的值在里面res.data.results。所以你只需要改变:
setMovies(res.data);
到:
setMovies(res.data.results);
如果您使用的是打字稿项目,那么您也可以使用接口从 api 映射所需的属性:
// just an examples of some properties
interface MoviesProps {
id: number;
video: boolean;
vote_count: number;
title: string;
}
并将您的状态设置为:
const [movies, setMovies] = useState<MoviesProps[]>([]);
TA贡献1827条经验 获得超9个赞
首先,您不应该那样公开发布您的 api 密钥。
您应该熟悉从公共 API 返回的表单。
{
"page": 1,
"results": [...],
"total_pages": 1000,
"total_results": 20000
}
在这里,我们看到了我们的结果res.data。我们可以像使用 Javascript 对象一样使用它,因为 Axios 会为我们转换此 JSON。(您也可以自己使用 JSON.parse() 进行转换)
您要查找的实际movies内容封装在result数据中的数组中。在您的尝试中,您试图map(这是一个来自数组的函数)结果对象,这显然不是一个数组,因此您面临的错误。
要解决此问题,您必须保存result您所在的州
setMovies(res.data.results);
TA贡献1821条经验 获得超4个赞
来自 api 的数据作为一个对象出现,{"page":1, "results":[...]}因此要在您的状态下设置电影的数组,您应该按如下方式访问结果数组;
useEffect(() => {
axios.get("https://api.themoviedb.org/3/trending/movie/week?api_key=API_KEY")
.then(res => {
setMovies(res.data.results);
}).catch(error =>
console.log(error)
)
},
[]
);
避免发布您的 API 密钥
添加回答
举报