ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • 스택/큐
  • entrySet
  • Queue
  • BFS
  • compareTo()
  • reactjs
  • 프로그래머스
  • 백준
  • Arrays.sort()
  • React
  • 코틀린
  • git
  • DP
  • greedy
  • HashMap
  • 해시
  • dfs
  • kotiln
  • 깃
  • 깃허브
  • Android
  • PriorityQueue
  • stack
  • java
  • 안드로이드
  • git bash
  • Comparator
  • 프로그래머스 Lv.2
  • sort
  • getOrDefault

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

WEB/React

[React] API 사용하기

2022. 2. 2. 21:03

Intro

React에서 영화 API 데이터를 가져와서 컴포넌트에 보여주기


API 에서 가져온 데이터는 JSON 형식이라, 배열 State를 사용하게 된다. 이는 이전 포스팅 설명했으니 참고하자.

 

[React] 배열 State

Intro 간단한 ToDo-list 어플 배열 State에 새로운 값 추가하기 배열 State값을 component로 render하기 State 연습을 위해 할 일을 추가할 수 있는 간단한 투두리스트 어플을 만들어보려고 한다. State의 기본

hu-coding.tistory.com

 

API 에서 데이터 받아오기

먼저, 영화 API 주소를 이용해 데이터를 가져오려고 한다.

https://yts.mx/api/v2/list_movies.json?minimum_rating=9&sort_by=year
=> 연도별로 정렬된 평점 9 이상의 영화 데이터


useEffect() 함수를 이용해 컴포넌트가 가장 처음으로 render 되었을 때 한 번만 api를 로딩하려고 한다. 두번째 인자로 빈 배열을 넣어주면 첫번째 인자에 들어있는 코드는 한 번만 작동한다는 것을 기억하자.

 fetch(
      `API주소`
    ).then((response) => response.json())

원하는 api 주소의 url을 fetch 시킨다. 그러면 request가 요청되고, 우리는 response를 받게되는데 데이터를 출력하기 위해서는 json을 추출해내야 한다. .then((response) => response.json())으로 response를 받아서 response.json을 return해준다.

그렇게 가져온 data를 컴포넌트에 보여주고 싶다면, 가져온 data를 state에 넣어야한다.
useState를 이용해서 json의 값을 setState 함수로 state 값에 넣어준다.
전체코드는 다음과 같다.

import { useState, useEffect } from "react";

function App() {
  const [loading, setLoading] = useState(true);
  const [movies, setMovies] = useState([]);
  useEffect(() => {
    fetch(
      `https://yts.mx/api/v2/list_movies.json?minimum_rating=9&sort_by=year`
    )
      .then((response) => response.json())
      .then((json) => {
        setMovies(json.data.movies);
        setLoading(false);
      });
  }, []);
  console.log(movies);
  return <div>{loading ? <h1>Loading...</h1> : null}</div>;
}
export default App;

+

async-await 사용

최근에는 보편적으로 .then 대신 async-await 사용한다. async 함수 getMovies를 만들어주고 useEffect()에서 호출해준다. 그리고 getMovies 함수 안에 api 데이터를 가져오도록 하는 것이다.

import { useState, useEffect } from "react";

function App() {
  const [loading, setLoading] = useState(true);
  const [movies, setMovies] = useState([]);
  const getMovies = async () => {
    // const response = await fetch(
    //   `https://yts.mx/api/v2/list_movies.json?minimum_rating=9&sort_by=year`
    // );
    // const json = await response.json();
    const json = await (
      await fetch(
        `https://yts.mx/api/v2/list_movies.json?minimum_rating=9&sort_by=year`
      )
    ).json(); // await를 await로 감싸기
    setMovies(json.data.movies);
    setLoading(false);
  };
  useEffect(() => {
    getMovies();
  }, []);
  console.log(movies);
  return <div>{loading ? <h1>Loading...</h1> : null}</div>;
}
export default App;

가져온 api 데이터를 보여주는 방법은 이전 포스팅의 배열 state 사용하는 법에서 설명했는데, map() 함수를 사용해주면 된다.

return (
<div>
  {loading ? (
    <h1>Loading...</h1>
  ) : (
    <div>
      {movies.map((movie) => (
        <div key={movie.id}>{movie.title}</div>
      ))}
    </div>
  )}
</div>
);

간단히 영화의 제목들만 가져와서 보여줬다.

저작자표시 (새창열림)

'WEB > React' 카테고리의 다른 글

[React] github pages에 배포하기 (Publishing)  (0) 2022.02.03
[React] React Router 사용하기  (0) 2022.02.03
[React] 배열 State  (0) 2022.02.02
[React] Effects (useEffect, clean-up)  (0) 2022.01.29
[React] Props (Memo, Props Types)  (0) 2022.01.28
    'WEB/React' 카테고리의 다른 글
    • [React] github pages에 배포하기 (Publishing)
    • [React] React Router 사용하기
    • [React] 배열 State
    • [React] Effects (useEffect, clean-up)
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바