본문 바로가기

리액트 기기기초

#7.3 Movie App part One

  • map을 쓰려면 key를 꼭 줘야 함
  • fetch, json을 진행 후 로딩을 끝냈기 때문에 반드시 setLoading(false)를 해줘야함
    then대신에 async-await를 보편적으로 사용함
    await을 감싸는 await을 만들 수 있음
    movies.map((movie
    ->map의 argument는 x, m, g 등등 마음대로 해도됨
    여기선 movie라고 정함
    div key={movie.id} h2{movie.title}/h2
    -> 이 컴포넌트들은 movie 배열에 있는 각 movie에서 변형되어 나온 것

    key={g} -> 따로 정해진 key가 없기 때문에 g를 가져와 key로 써줌
    단, g가 고유한 값일 경우에만 가능
import { useEffect, useState } from "react";

function App() {
  const [loading, setLoading] = useState(true);
  const [movies, setMovies] = useState([]);
  const getMovies = async () => {
    const json = await (await fetch('https://yts.mx/api/v2/list_movies.json?minimum_rating=8.8&sort_by=year')).json();
    setMovies(json.data.movies);
    setLoading(false);
  };
  useEffect(() => {
    getMovies();
  }, []);
  console.log(movies);
  return <div>{loading ? <h1>Loading...</h1> :
    <div>{movies.map(movie =>
      <div key={movie.id}>
        <img src={movie.medium_cover_image} />
        <h2>{movie.title}</h2>
        <p>{movie.summary}</p>
        <ul>
          {movie.genres.map((g)=>(
            <li key={g}>{g}</li>
          ))}
        </ul>
      </div>
    )}</div>}
  </div>;
}

export default App;

'리액트 기기기초' 카테고리의 다른 글

#7.5 React Router  (0) 2023.03.13
#7.4 Movie App part Two  (0) 2023.03.13
#7.2 Coin Tracker  (0) 2023.03.11
#7.1 To Do List part Two  (0) 2023.03.11
#7.0 To Do List part One  (0) 2023.03.10