npm i axios
로 터미널에 입력하여 설치axios
를 import 한다componentDidMount()
에서 axios로 API 호출axios.get()
함수의 인자에 URL을 전달해서 API를 호출한다.axios.get()
을 포함하고 있는 함수의 실행이 끝날 때 까지 시간이 걸린다라고 알려줘야한다.getMovie()
함수 기다린 후 axios.get()
함수가 반환 데이터를 잡는다. getMovie()
function을 만들고 그 함수 안에 axios.get()
이 실행되도록 한다. 이 function이 반환한 값을 movies에 저장한다.componentDidMount()
가 실행되면, this.getMovies
가 실행된다.
async 와 await
키워드가 필요하다.getMovies()
에 async를 붙이고 axios.get()
에 await을 붙인다.async
는 js에게 getMovies
function이 비동기라고 알려준다.await
은 js에게 axios.get()
function의 실행완료를 기다렸다가 끝나면 진행하라고 알려준다.영화 앱의 실행 순서
리액트 앱 launch -> render() funcion -> 최초의 state에는 isLoading, movies 가 존재 -> isLoading 은 true, movies는 array(length === 0) 이다. -> 최초의 실행화면은 Loading... 이 rendering된다.
App component Mounting -> componentDidMount() function Launch -> getMovies() funcion Launch -> 시간이 소요되는 axios.get()포함이 되어있다. -> getMovies() function에 async add , axios.get() funcion에 await add -> async , await은 짝이다.
const {
data: {
data: { movies },
},
this.setState({ movies: movies})
말고 this.setState({ movies })
로 수정할 수 있다.isLoading
의 값을 false로 수정해준다.this.setState({ movies, isLoading: false })
이렇게 영화 데이터를 가져왔고 , 로딩 상태까지 변경했다. 다만 영화 데이터는 출력하고 있지 않은데, 진행하려면 movie state을 화면에 그려야한다. 그레서 Movie Component를 만들어야한다.
Movie.propType ={}
안에 값들을 채워서 필요한 데이터들을 맞는 값만 받아올수있게 설정해준다.?sort_by=rating
을 붙여서 평점 내림차순으로 영화데이터를 가져올 수 있다.We are ready
자리에 movies.map()
을 사용한다 import Movie from "./Movie"
로 가져온다movies.map()
function에 <Movie />
를 반환하도록 한다.<Movie />
안에 props를 전달하도록 코드를 작성한다.key props
는 유일해야 하기 떄문에, API에서 넘겨주는 id를 사용한다.key={movie.id}
nomad coder movie API를 통해 영화데이터 가져옴 -> 영화데이터 가져올 때 axios.get() function use -> axios.get() function은 시간이 필요하기 떄문에 async , await use -> state에 movie data가 update되면 isLoading... 을 보여주던 화면을 Movie Component를 출력하게 만들어준다.