React Router

김득회·2022년 4월 13일
0

리액트에는 SPA 방식을 사용하여 페이지가 하나밖에 없는데 화면전환을 어떻게
하는 것인가 항상 궁금하였다.

페이지를 다시 요청하지 않고 화면전환을 하는 방식은 컴포넌트를 교체하는 방식으로
사용하면 되는 것이었다.

이것을 편리하게 해줄 수 있는 방법이 바로 ReactRouter를 사용하는 방식이다.

해당 라이브러리를 사용하면 편리하게 페이징 라우팅을 할 수 있다.
라이브러리 설치 방법은 다음과 같다.

npm install react-router-dom@6

맨뒤에 붙은 6은 버전을 뜻하는 것이다. 설치가 완료되면 화면 전환을 할 파일에서
라이브러리를 호출하면된다.

import "./App.css";
import { BrowserRouter, Route, Routes } from "react-router-dom";

import RouteTest from "./component/RouteTest";

import Home from "./pages/Home";
import New from "./pages/New";
import Edit from "./pages/Edit";
import Diary from "./pages/Diary";

function App() {
  return (
    <BrowserRouter>
      <div className="App">
        <h2>APP.JS</h2>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/new" element={<New />} />
          <Route path="/edit" element={<Edit />} />
          <Route path="/diary" element={<Diary />} />
        </Routes>
        <RouteTest />
      </div>
    </BrowserRouter>
  );
}

export default App;

가장 먼저 알아야 하는 것이 바로 BrowserRouter이다.
이것을 가장 최상위 태그에 감싸주는 형식으로 만들어준다. BrowserRouter 안에 있는 것들은 브라우저 url과 매핑될 수 있다.

그 다음 이동할 페이지 컴포넌트를 Routes 태그로 묶어준 후에 연결할 컴포넌트들을 하나씩 Route에 선언 해주고 속성 path에 연결할 라우터 링크, element에는 컴포넌트 태그를 써줌으로써 연결을 할 수 있다.

페이지 이동

보통 우리가 MPA 형식의 웹사이트를 이용할 때 페이지를 이동할 때 사용하는 기술로는 a태그가 있을 것이다. a태그를 사용하면 페이지가 이동되지만 다시 페이지를 요청하기 때문에 리엑트의 장점인 SPA형식의 목적에 벗어 나기때문에 a태그는 외부 사이트 요청을 할 때만 사용하고 나머지는 지양한다.

그럼 SPA환경에서 페이지를 이동할 때 사용하는 방법은 어떤 것이 있을까?

react-router-dom 라이브러리에는 Link라는 기술이 있다. 이것을 사용하여 페이지를 이동하면 SPA형식을 사용한 페이지 교체를 할 수 있다.

import { Link } from "react-router-dom";
const RouteTest = () => {
  return (
    <>
      <Link to={"/"}>HOME</Link>
      <br />
      <Link to={"/diary"}>DIARY</Link>
      <br />
      <Link to={"/new"}>NEW</Link>
      <br />
      <Link to={"/edit"}>EDIT</Link>
    </>
  );
};

export default RouteTest;

Link를 사용하고 내부 속성의 to에 페이지 라우터 주소를 연결해주면 된다.
a 태그의 href와 같다고 생각하면 된다.

이렇게 지정을 해주면 아까 Route태그에서 path로 지정한 경로와 맞는 컴포넌트가 호출이 되면서 페이지가 이동하는 것처럼 컴포넌트가 교체된다.

profile
감성 프로그래머 HoduDeuk

0개의 댓글

Powered by GraphCDN, the GraphQL CDN