React - react-router-dom

2022. 5. 2. 17:29·React
반응형

 

 

이번 포스팅에서는 react-router-dom에 대해 알아보고자 한다. react-router-dom은 SPA 앱을 만들 때 많이 사용되는 패키지이며 특정 URI로 접근했을 때 원하는 컴포넌트를 랜더링해주기 위한 용도로 사용한다.

 

우선 VSCode 에디터에서 npm install을 이용해 react-router-dom을 설치해주도록 하자.

npm install react-router-dom

이 글을 포스팅하는 시점에서 react-router-dom의 버전은 V6 이다. 향후 버전 업이 될 경우 사용법이 조금 달라질 수 있으니 참고하도록 하자.

 

// App.js

import { BrowserRouter as Router, Link, Routes, Route } from 'react-router-dom'
import Home from './pages/home/index.jsx'
import Comment from './pages/comment/index.jsx'
import Board from './pages/board/index.jsx'
import Button from './pages/login/button.jsx'
import Login from './pages/login/index.jsx'

function App() {
  return (
    <div className="App">
      <Router>
        <ul>
          <li><Link to='/'>HOME</Link></li>
          <li><Link to='/comment'>COMMENT</Link></li>
          <li><Link to='/board'>BOARD</Link></li>
          <li>
            <Button to='/login'>LOGIN</Button>
          </li>
        </ul>
        <Routes>
          <Route path='/' element={<Home />} />
          <Route path='/comment' element={<Comment />} />
          <Route path='/board' element={<Board />} />
          <Route path='/login' element={<Login />} />
        </Routes>
      </Router>
    </div>
  );
}

export default App;

위의 코드는 App.js 파일 안에서 react-router-dom를 이용해 특정 URI로 접근했을때 원하는 컴포넌트를 랜더링하도록 만든 예제 코드이다. 우선 react-router-dom에서 제공해주는 BrowserRouter, Link, Routes, Route의 기능에 대해 짚고 넘어가도록 하자.

 

👉 BrowserRouter 

histroy API를 사용해 URL과 UI를 동기화하는 라우터이다. React에서 라우터를 사용할 경우 BrowserRouter가 최상위 컴포넌트가 된다. import { BrowserRouter as Router } from 'react-router-dom' 형식으로 많이 사용한다.

 

👉 Link 

HTML의 <a>엘리먼트와 비슷한 기능을 한다. <Link /> component의 to 속성에 설정된 링크로 이동하게 된다. 기록은 history 스택에 저장된다. 

 

👉 Routes 

<Route /> component들을 구성하는 부모 요소이다. 기존에 사용하던 Switch가 react-router V6로 넘어오면서 Routes로 이름이 변경되었다. 자식 컴포넌트인 <Route /> component 중 매치되는 첫 번째 요소를 랜더링하게 된다. <Routes /> component의 children으로 <Route /> component들을 넣어서 사용하게 된다.

 

👉 Route 

props로 path 와 element를 갖는다. path 속성에는 경로를, element 속성에는 component를 넣어준다. <Route />의 path 속성에 설정된 URI와 현재 경로가 일치하면 element 속성값에 해당하는 컴포넌트 혹은 함수를 랜더링 한다.

 

 

추가로 react-router-dom 에서 제공해주는 useNavigate Hook을 사용해보기 위해 <Link /> component가 아닌 LOGIN버튼을 이용해서 Login page로 이동이 가능하게끔 만들어 보았다.  

👉 useNavigate 

useNavigate Hook을 실행하면 페이지 이동을 할 수 있게 해주는 함수를 반환한다. 반환하는 함수를 navigate 변수에 저장한 후 navigate의 인자값으로 path를 넘겨주면 해당 경로로 이동이 가능해진다. <Link /> component와 다른 점은 함수 호출을 통해 페이지를 이동하기 때문에 특정 조건을 충족할 경우에만 페이지 이동을 하도록 처리할 수 있다. 즉, 페이지 전환시 추가로 처리해야 하는 로직이 있을 경우 useNavigate을 사용해서 처리해주면 된다.

 

아래의 코드는 App.js에서 import 해 온 button.jsx 파일이다.

// button.jsx 파일

import { useNavigate } from 'react-router-dom'

const Button = ({children, to, ...rest}) => {

    const navigate = useNavigate()

    const navBtn = e => {
        if (to) {
            navigate(to)
        }
    }

    return (
        <button onClick={navBtn}>
            {children}
        </button>
    )
}

export default Button;

App.js 파일에서 <Button /> component의 props로 to 속성을 전달하고 있기 때문에 Button 함수에서 to의 속성값으로 들어간 경로를 navigate( ) 함수의 인자값으로 전달하였다. 이제 <button>엘리먼트로 만든 LOGIN 버튼을 클릭할 때마다 <Link to='/login'>LOGIN</Link>과 동일한 효과를 부여할 수 있다.

 

 

 

 

반응형

'React' 카테고리의 다른 글

Redux - redux middleware  (0) 2022.05.07
React - react-redux  (0) 2022.05.03
React - Custom Hook  (0) 2022.05.01
React - useCallback & useMemo  (0) 2022.04.30
React - useContext & useReducer  (1) 2022.04.29
'React' 카테고리의 다른 글
  • Redux - redux middleware
  • React - react-redux
  • React - Custom Hook
  • React - useCallback & useMemo
bitkunst
bitkunst
Ever tried, Ever failed, No matter. Try again, Fail again, Fail better.
  • bitkunst
    THE DEVELOPER
    bitkunst
  • 전체
    오늘
    어제
  • bitkunst GitHub
    • 분류 전체보기 (154)
      • Setup (1)
      • HTML (7)
      • CSS (10)
      • Go (2)
      • JavaScript (14)
      • TypeScript (3)
      • Node (34)
        • Node.js (7)
        • Express (19)
        • NestJS (8)
      • React (19)
      • MySQL (6)
      • BlockChain (14)
      • Ethereum (20)
      • AWS (5)
      • Linux (2)
      • Infra (2)
        • Docker (2)
      • Testing (2)
      • ABOUT CS (11)
      • 토이 프로젝트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    html
    JavaScript
    프론트엔드
    블록체인 지갑 서버 만들기
    Blockchain
    redux
    AWS EC2
    타입스크립트 블록 체인
    웹프론트엔드
    타입스크립트로 블록체인 만들기
    Nodejs
    블록체인
    nodejs mysql
    AWS
    자바스크립트
    css
    CSS Style
    타입스크립트로 블록 체인 만들기
    Nest
    블록체인 트랜잭션 만들기
    nestJS
    타입스크립트 블록체인 만들기
    웹
    React
    이더리움 스마트 컨트랙트
    이더리움
    웹개발
    Ethereum
    리액트
    TypeScript Blockchain
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
bitkunst
React - react-router-dom
상단으로

티스토리툴바