[React] 라우터 사용

2022. 9. 20. 13:49·개발/React
728x90
반응형

1. React에서 router사용하기

리액트는 페이지가 하나인데 어떻게 여러개의 페이지를 보여줘야 할까?

페이지도 컴포넌트, 하위 컴포넌트들을 모아서 페이지의 형태로 구성을 하고

페이지 컴포넌트를 url의 경로에 맞춰서 보여주면 된다.

한페이지에 내용이 교체되면서 페이지가 이동된것처럼 보여주는 것이다.

리액트는 새로고침되지 않는 어플리케이션이기 때문에 리액트의 페이지 이동은 눈속임이다.

 

리액트 라우터 라이브러리가 해주는일 : url이 바뀔때 컴포넌트를 바꿔줌

 

router 설치 https://reactrouter.com/en/v6.3.0#welcome-to-react-router

 

Docs Home v6.3.0

Official assets for things like articles and video tutorials.

reactrouter.com

 

설치 명령어

npm install react-router-dom@6

index.js에서

import { BrowserRouter } from "react-router-dom";

2. index.js

import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { BrowserRouter } from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);

reportWebVitals();

BrowserRouter를 import해주고 컴포넌트를 감싸면 안에있는 컴포넌트가 라우터 기능을 사용할수 있다.

 

3. App.js

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

import { Main, Login, Shop, Detail } from "./page";

function App() {
  return (
    <div className="App">
      <Routes>
        <Route path="/" element={<Main />} />
        <Route path="/login" element={<Login />} />
        <Route path="/shop" element={<Shop />} />
        <Route path="/detail/:id/:num/:name" element={<Detail />} />
      </Routes>
    </div>
  );
}

export default App;

위와 같이 Route 태그에 path를 설정하여 경로를 정하고 element에 컴포넌트를 넣어 사용할수 있다.

 

4. 컴포넌트 예시

(1) page/Main.js

import React from "react";
import { Header, Body } from "../com";
const Main = () => {
  return (
    <div>
      <Header title="메인페이지" />
      <Body path="/login" name="로그인" />
    </div>
  );
};

export default Main;

(2) com/Header.js

import React from "react";

const Header = ({ title }) => {
  return <div className="header">{title}</div>;
};

export default Header;

(3) com/Body.js

import React from "react";
import { Link, useNavigate } from "react-router-dom";

const Body = ({ path, name, item }) => {
  const nav = useNavigate();
  return (
    <div className="body">
      <Link to={path}>{name}페이지로 이동</Link>
      <button
        onClick={() => {
          nav(path);
        }}
      >
        이건 {name}으로 이동 버튼
      </button>
      {item?.id ? <div>{item.id}번 상품</div> : null}
      {item?.num ? <div>{item.num}개</div> : null}
      {item && item.name ? <div>상품명 : {item.name}</div> : null}
    </div>
  );
};

export default Body;

Link : 리액트에서 a태그같은 역할을 해준다.

Link 컴포넌트를 이용해서 경로를 바꿔주고 컴포넌트를 교체해서 보여준다.

Link에 필요한 props는 to : to이름의 props에 이동할 경로를 넣어준다.

(4) page/Detail.js

import React, { useState } from "react";
import { Header, Body } from "../com";
import {
  Link,
  useParams,
  useSearchParams,
  useLocation,
} from "react-router-dom";

const Detail = () => {
  const [search, setSearch] = useState("");
  const params = useParams();
  const location = useLocation();
  const [query, setQeury] = useSearchParams();
  console.log(query.get("q"));
  const keyInput = (e) => {
    setSearch(e.target.value);
  };
  return (
    <div>
      <Header title="상세페이지" />
      <div>{search}</div>
      <div>검색 값 : {query.get("q")}</div>
      <input onChange={keyInput} />
      <Link to={location.pathname + "?q=" + search}>검색하기</Link>
    </div>
  );
};

export default Detail;

파라미터 값을 가져오기 위한 방법

리액트에서 지원해주는 유용한 함수는 리액트 훅이다.

리액트 훅 함수 useParams를 사용해서 작업할 수 있다.

url에 경로에 있는 파라미터들을 객체의 형태로 불러올수 있다.

uesParams 함수를 실행해주고 반환된 객체를 가지고 동작한다.

 

검색 쿼리문

검색하려면 input입력창이 있어야 한다. 

입력했을때 값을 저장해놓고 useState로 들고 있어야 한다.

input value를 useState값에 넣어놓고 입력한 값을 언제든 사용할수 있다.

 

검색 쿼리문 만들기

useSearchParams 함수를 실행해서 반환받은 객체를 사용한다.

?뒤에 키값을 기준으로 ?q=1 이런 형태는 q라는 키값이 객체형태로 나온다 {q : 1}

 

 

728x90
반응형

'개발 > React' 카테고리의 다른 글

[React] Redux  (2) 2022.10.04
[React] 게시판 만들기  (0) 2022.09.26
[React] 가위바위보 만들기  (0) 2022.09.19
[React] 함수형 useEffect  (0) 2022.09.19
[React] 클래스형 컴포넌트  (2) 2022.09.19
'개발/React' 카테고리의 다른 글
  • [React] Redux
  • [React] 게시판 만들기
  • [React] 가위바위보 만들기
  • [React] 함수형 useEffect
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    하이퍼레저
    html
    30일챌린지
    erc20
    컨테이너
    node.js
    go언어
    node
    mysql
    30일 챌린지
    nodejs
    React
    go
    도커
    프로그래머스
    ERC721
    CSS
    블록체인
    js
    명령어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[React] 라우터 사용
상단으로

티스토리툴바