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條經驗 獲得超5個贊
來自 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 密鑰
添加回答
舉報