프로그래밍 언어/REACT

영화 데이터 화면에 그리기

· 코딩마이데이

console.log() 함수로 영화 데이터 출력해 보기

axios.get()으로 잡은 영화 데이터가 movies 변수 안에 들어 있으니까 console.log(movies)를 통해 출력해봅시다.

import axios from "axios";
import React from "react";

class App extends React.Component {
  state = {
    isLoading: true,
    movies: [],
  };
  getMovies = async () => {
    const movies = await axios.get("https://yts-proxy.now.sh/list_movies.json");
    console.log(movies);
  };
  componentDidMount() {
    this.getMovies();
  }

  render() {
    const { isLoading } = this.state;

    return <div>{isLoading ? "로딩중..." : "우리는 준비 됐어"}</div>;
  }
}

export default App;

 

[Console] 탭을 {data: {..}, status: 200, ...}와 같이 짧게 표현된 객체가 있을 것입니다. 이게 바로 API로 받아온 영화 데이터입니다.

 

영화 데이터 자세히 살펴보기

왼쪽에 있는 ▶ 표시를 눌러서 펼처보십시오. 객체를 자세히 표시해 줄 것입니다.

 

data 키를 또 펼처보면 그 안에 또 다시 data 키가 들어 있을 것입니다. 자세히 살펴보면 그 안에 movies 배열이 들어 있습니다.

 

객체에 있는 movies 키에 접근하기

import axios from "axios";
import React from "react";

class App extends React.Component {
  state = {
    isLoading: true,
    movies: [],
  };
  getMovies = async () => {
    const movies = await axios.get("https://yts-proxy.now.sh/list_movies.json");
    console.log(movies.data.data.movies);
  };
  componentDidMount() {
    this.getMovies();
  }

  render() {
    const { isLoading } = this.state;

    return <div>{isLoading ? "로딩중..." : "우리는 준비 됐어"}</div>;
  }
}

export default App;

movies 변수에는 이제 배열이 들어있습니다.

 

객체에 있는 movies 키에 구조 분해 할당을 사용하여 접근하기

import axios from "axios";
import React from "react";

class App extends React.Component {
  state = {
    isLoading: true,
    movies: [],
  };
  getMovies = async () => {
    const {
      data: {
        data: { movies },
      },
    } = await axios.get("https://yts-proxy.now.sh/list_movies.json");
    console.log(movies);
  };
  componentDidMount() {
    this.getMovies();
  }

  render() {
    const { isLoading } = this.state;

    return <div>{isLoading ? "로딩중..." : "우리는 준비 됐어"}</div>;
  }
}

export default App;

 

movies state에 영화 데이터 저장하기

this.setState({ movies: movies })와 같이 작성하면 movies state에 영화 데이터를 저장할 수 있습니다.

import axios from "axios";
import React from "react";

class App extends React.Component {
  state = {
    isLoading: true,
    movies: [],
  };
  getMovies = async () => {
    const {
      data: {
        data: { movies },
      },
    } = await axios.get("https://yts-proxy.now.sh/list_movies.json");
    this.setState({ movies: movies });
  };
  componentDidMount() {
    this.getMovies();
  }

  render() {
    const { isLoading } = this.state;

    return <div>{isLoading ? "로딩중..." : "우리는 준비 됐어"}</div>;
  }
}

export default App;

 

ES6에서는 객체의 키와 대입할 변수의 이름이 같다면 코드를 축약할 수 있습니다.

import axios from "axios";
import React from "react";

class App extends React.Component {
  state = {
    isLoading: true,
    movies: [],
  };
  getMovies = async () => {
    const {
      data: {
        data: { movies },
      },
    } = await axios.get("https://yts-proxy.now.sh/list_movies.json");
    this.setState({ movies });
  };
  componentDidMount() {
    this.getMovies();
  }

  render() {
    const { isLoading } = this.state;

    return <div>{isLoading ? "로딩중..." : "우리는 준비 됐어"}</div>;
  }
}

export default App;

 

isLoading state true에서 false로 업데이트하기

isLoading state도 false에서 true로 업데이트합니다.

import axios from "axios";
import React from "react";

class App extends React.Component {
  state = {
    isLoading: true,
    movies: [],
  };
  getMovies = async () => {
    const {
      data: {
        data: { movies },
      },
    } = await axios.get("https://yts-proxy.now.sh/list_movies.json");
    this.setState({ movies, isLoading: false });
  };
  componentDidMount() {
    this.getMovies();
  }

  render() {
    const { isLoading } = this.state;

    return <div>{isLoading ? "로딩중..." : "우리는 준비 됐어"}</div>;
  }
}

export default App;

 

영화 앱을 실행해보면 처음에는 로딩 중...이 화면에 나타나다가, 조금 뒤에 우리는 준비됐어가 화면에 나타납니다.

 

'프로그래밍 언어 > REACT' 카테고리의 다른 글

영화 앱 스타일링하기 - 기초  (0) 2025.02.07
Movie 컴포넌트 만들기  (0) 2025.02.06
영화 API 사용해 보기  (1) 2025.02.04
영화 앱 만들기 워밍업  (0) 2025.02.03
클래스형 컴포넌트  (0) 2025.02.02