亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 React 中使用 API 信息映射元素

在 React 中使用 API 信息映射元素

蠱毒傳說 2023-01-06 11:18:45
我正在開發一個帶有電影 API ( https://developers.themoviedb.org ) 的 React 應用程序。問題是我正在嘗試將來自 API 的信息放入卡片中。我為此使用 useState 和 useEffect。另外,我使用 Axios 從 API 中獲取它。我不知道,我看不到什么不起作用。錯誤消息是 map is not a function,而且我認為我的 useEffect 有問題。請幫忙!const Home = () => {  const [movies, setMovies] = useState([]);  useEffect(() => {    axios.get("https://api.themoviedb.org/3/trending/movie/week?api_key=**APIKEY**")      .then(res => {        setMovies(res.data);      }).catch(console.log)  },    []  );  return (    <section id="main-page">      <div className='list-main-page'>        <a href='#'>          <h2>            Películas que son tendencia            <FontAwesomeIcon className='arrow-list' icon={faArrowRight} />          </h2>        </a>        <div className='card-list-container'>        {movies.map((movie, i) => {            return (              <Card key={i} image={movie.poster_path} />            )})          }        </div>      </div>    </section>  )};export default Home;
查看完整描述

4 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

你應該像這樣使用代碼:

setMovies(res.data.results);


查看完整回答
反對 回復 2023-01-06
?
HUX布斯

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[]>([]);


查看完整回答
反對 回復 2023-01-06
?
素胚勾勒不出你

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);


查看完整回答
反對 回復 2023-01-06
?
收到一只叮咚

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 密鑰


查看完整回答
反對 回復 2023-01-06
  • 4 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號