본문 바로가기
프로그래밍/React

[React] Router

by 정빈e 2022. 5. 9.
728x90

라우팅이란?

"사용자가 url 링크를 요청했을 때 어떤 특정한 페이지로 연결할 건지 결정하는 것"

 

영화 정보들을 불러올 홈, 그리고 상세정보 페이지로 넘어가는 상세페이지 두 가지로 해보았다. 강의에서 보여준 영화 API가 안 돼서 찾다가 유튜브 API를 사용했다. 

 

 

React Router 설치

npm install react-router-dom
// or
yarn add react-router-dom

홈 페이지에서 movie 컴포넌트를, /detail 페이지에서 Detail 컴포넌트를 보여줄 것이다.

 

 

routes 폴더를 만들어 페이지별로 보여줄 컴포넌트들을 모아뒀다.

 

 

 

App.js

import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import Home from "./routes/Home";
import Detail from "./routes/Detail";
function App() {
  return (
    <Router>
      <Routes>
        <Route path="/detail" element={<Detail />} />
        <Route path="/" element={<Home />} />
      </Routes>
    </Router>
  );
}

export default App;

 

react-router-dom과 각 컴포넌트를 임포트한다.

Router는 BrowserRouter 또는 HashRouter를 사용한다. HashRouter는 url에 #이 붙어 BrowserRouter를 사용했다.

 

Router안에 Routes, 그리고 그 안에 Route 컴포넌트에 path로 경로를 지정하고 element prop에 자식 컴포넌트를 할당한다.

 

Home.js

import { useEffect, useState } from "react";
import Movie from "../components/Movie";

function Home() {
  const [loading, setLoading] = useState(true);
  const [movies, setMovies] = useState([]);
  const getMovies = async () => {
    const json = await (
        await fetch(
          "YOUTUBE API 불러오기"
        )
      ).json();
    setMovies(json.items);
    setLoading(false);
  };

  useEffect(() => {
    getMovies();
  }, []);

  return (
    <div>
      {loading ? (
        <h1>Loading...</h1>
      ) : (
        <div>
          {movies.map((movie) => (
            <Movie
              key={movie.id}
              id={movie.id}
              title={movie.snippet.title}
              description={movie.snippet.description}
              url={movie.snippet.thumbnails.medium.url}
            />
          ))}
        </div>
      )}
    </div>
  );
}

export default Home;

 

Movie.js

import PropTypes from "prop-types";
import { Link } from "react-router-dom";

function Movie({ id, title, description, url }) {
  return (
    <div key={id}>
      <img src={url} alt="title" />
      <h2>
        <Link to="/detail">{title}</Link>
      </h2>
      <p>{description}</p>
    </div>
  );
}

Movie.propTypes = {
  coverImg: PropTypes.string,
  title: PropTypes.string.isRequired,
  description: PropTypes.string.isRequired,
  url: PropTypes.string.isRequired,
};

export default Movie;

클릭 시 페이지 이동은 a태그를 사용하는 것이 아닌 Link를 사용한다.

react-router-dom에서 Link를 임포트 하여 지정한 경로를 적어준다.

 

Detail.js

function Detail() {
  return <h1>Detail</h1>;
}

export default Detail;​
 

 

 

 

※ react-router-dom 5 버전에서 6 버전 업데이트되면서 바뀐 부분

1. Switch컴포넌트가 Routes컴포넌트로 대체되었다.
Switch -> Routes

2. Route컴포넌트 사이에 자식 컴포넌트를 넣지 않고, element prop에 자식 컴포넌트를 할당하도록 바뀌었다.

 

 


[노마드코더 ReactJS로 영화 웹서비스 만들기] 

[목표: 5월 10일까지 끝내기]

#1 [2021 UPDATE] INTRODUCTION     22.05.02

#2 [2021 UPDATE] THE BASICS OF REACT     22.05.03

#3 [2021 UPDATE] STATE     22.05.05

#4 [2021 UPDATE] PROPS    22.05.05

#5 [2021 UPDATE] CREATE REACT APP     22.05.07

#6 [2021 UPDATE] EFFECTS     22.05.08

#7 [2021 UPDATE] PRACTICE MOVIE APP    22.05.09

728x90

'프로그래밍 > React' 카테고리의 다른 글

nvm으로 node.js 버전 변경하기 / 윈도우  (0) 2022.05.11
[React] 깃허브 배포 Build, Deploy  (0) 2022.05.10
[React] useEffect  (0) 2022.05.08
[React] props  (0) 2022.05.06
[React] state  (0) 2022.05.05

댓글