본문 바로가기
풀스택/React

4. fetch 비동기형식

by woohyun22 2019. 4. 17.

App3.js 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import React, { Component } from "react";
import "./App.css";
import Movie from "./Movie";
 
class App extends Component {
  state = {};
 
  componentWillMount() {
    //request API
    console.log("componentWillMount() called");
  }
  //통신-------
  componentDidMount() {
    // $.get('',function(response){}
    // });
    this._getMovies();
  }
 
  _getMovies = async () => {
    //async붙이면 비동기
    const movies = await this._callApi(); //await는 비동기를 잠시 중지시켜놓는것 - return 할때까지 기다려준다.
    this.setState({
      movies: movies
    });
  };
  _callApi = async () => {
    return (
      fetch("https://yts.am/api/v2/list_movies.json?sort_by=rating"//비동기형식
        //.then((response)=>console.log(response))
        .then(response => response.json())
 
        // .then((response)=> {//fetch결과가 들어온다.
        //   return response.json();
        // })
 
        .then(json => json.data.movies)
 
        // .then(function(response) {//이식을 람다로 하면위처럼
        //   const result = response;
        //   return result;
        // })
        .catch(err => console.error(err))
    );
  };
 
  _renderMovies = () => {
    //만든함수는 앞에 _ 하고 되도록 람다형식으로
    //const movies = [<Movie/>,<Movie/>,<Movie/>];//이런식으로 넣어주는것
    const movies = this.state.movies.map((movie, index) => {
      console.log(movie);
      return (
        <Movie
          title={movie.title}
          poster={movie.medium_cover_image}
          genres={movie.genres}
          synopsis={movie.synopsis}
          key={index}
        />
        
      );
    });
    return movies; //jsx배열(컴포넌트)
  };
 
  render() {
      const {movies} =this.state;
    return (
      <div className={ movies ? 'App' : 'App--loading'}>
        {//this._render()
            movies ? this._renderMovies() : "loading...."
        //무비 목록이 null이면 로딩이다가 rend받아 들어오면 this._render 실행됨
        }
      </div>
    );
  }
}
 
export default App;
 
cs

2.의 App2.js와 달라진 점DidMount안 정리, _getMovies 함수 - 비동기형식(async) _callApi에서는 fetch로 api의 결과를 json으로 가져와서 배열에 넣어줌 원하는 이름을 적고 값을 보여줌.


- fetch에서 지정 api값의 json데이터를 가져온다. json.data.movies에 넣어진다.


render의 const{movies} = this.state;를 씀으로써 render안에서 movies를 불러올수있다.


_renderMovies함수는 state가 있을때만 state안의 데이터를 반환해준다.



728x90

'풀스택 > React' 카테고리의 다른 글

5-2. props, state  (0) 2019.04.21
5-1. JSX 기본 정리  (0) 2019.04.19
3. 중간정리 - 리액트 보충설명  (0) 2019.04.17
2. react 리스트 - 배열  (0) 2019.04.16
1. App.js 예제 및 Movie 예제 만들기  (0) 2019.04.15

댓글