프로그래밍 언어/REACT

react-router-dom 설치하고 프로젝트 폴더 정리하기

· 코딩마이데이

'화면 이동'을 시켜주려면 '화면 이동을 시켜주는 장치'가 필요합니다. 그것이 바로 라우터입니다.

쉽게 말하면 라우터는 URL에 맞게 이동시켜주는 장치입니다.

 

react-router-dom 설치하기

npm install react-router-dom

 

 

components 폴더에 Movie 컴포넌트 옮기기

이제 컴포넌트를 역할에 맞게 분리해서 폴더에 담아 관리할 것입니다.

 

만약 VSCode에서 무언가를 업데이트하겠냐고 물어보는 창을 띄우면 <No>를 누릅니다.

 

routes 폴더에 라우터가 보여줄 화면 만들기

 

 

Home.js 파일에 작성할 구조는 App.js  파일의 코드를 그대로 복사하면 됩니다. Home.js 파일부터 수정해봅시다.

 

Home.js 수정하기

import axios from "axios";
import React from "react";
import Movie from "../components/Movie";
import "./Home.css";

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

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

    return (
      <section className="container">
        {isLoading ? (
          <div className="loader">
            <span className="loader__text">로딩 중...</span>
          </div>
        ) : (
          <div className="movies">
            {movies.map((movie) => (
              <Movie
                key={movie.id}
                id={movie.id}
                year={movie.year}
                title={movie.title}
                summary={movie.summary}
                poster={movie.medium_cover_image}
                genres={movie.genres}
              />
            ))}
          </div>
        )}
      </section>
    );
  }
}

export default Home;

 

Home.css  만들기

routes 폴더에 Home.css를 만든 다음 아래와 같이 입력합니다.

.container {
  height: 100%;
  display: flex;
  justify-content: center;
}

.loader {
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  font-weight: 300;
}

.movies {
  display: grid;
  grid-template-columns: repeat(2, minmax(400px, 1fr));
  grid-gap: 100px;
  padding: 50px;
  width: 80%;
  padding-top: 70px;
}

@media screen and (max-width: 1090px) {
  .movies {
    grid-template-columns: 1fr;
    width: 100%;
  }
}

 

App.js 수정하기

import React from "react";
import Home from "./routes/Home";
import "./App.css";

function App() {
  return <Home />;
}

export default App;

 

 

브라우저 폭에 맞게 영화 카드가 1줄 또는 2줄로 출력됩니다. 또한, 맨 위에 있는 영화 포스터 이미지가 잘리지 않게 바뀌었습니다.

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

내비게이션 만들어 보기  (0) 2025.02.17
라우터 만들어 보기  (0) 2025.02.14
영화 앱 멋지게 스타일링하기  (1) 2025.02.09
영화 앱 스타일링하기 - 기초  (0) 2025.02.07
Movie 컴포넌트 만들기  (0) 2025.02.06