티스토리 뷰

- React

React Router 라우팅하기

나둥식 2022. 11. 8. 02:08

※ 리액트 = 싱글페이지 애플리케이션 = 페이지를 1개만 씀!   ==>   a태그 못씀!

✅ router 라이브러리 설치하기

https://www.npmjs.com/package/react-router-dom

 

react-router-dom

Declarative routing for React web applications. Latest version: 6.4.3, last published: 6 days ago. Start using react-router-dom in your project by running `npm i react-router-dom`. There are 15505 other projects in the npm registry using react-router-dom.

www.npmjs.com

npm i react-router-dom

 

 

✅ router 적용하기

🔎 라우팅이란?
- 사용자가 요청한 URL에 따라 해당 URL에 맞는 페이지를 보여주는 것
- 가장 많이 쓰는 라이브러리 = 리액트 라우터(React Router)
- React Router :  신규 페이지를 불러오지 않는 상황에서 각각의 url에 따라 선택된 데이터를 하나의 페이지에서 렌더링해주는 라이브러리

 

1️⃣ 라우팅하기

🔎 Router 활용하기
1. <BrowserRouter>태그로 컴포넌트 사용하기
2. <Routes> 컴포넌트 :  여러 Route를 감싸서 그 중 규칙이 일치하는 라우트 단 하나만을 렌더링 시킴
3. <Route> 컴포넌트 :  path속 성에 경로, element 속성에는 컴포넌트를 넣어줌
⭐ 하위 경로에 여러 라우팅을 매칭시키고 싶다면 URL뒤에 *을 사용하여 일치시킬 수 있음

<Route path="main/*" />

4. <Link> 컴포넌트 :  <Link to="경로">링크명</Link>

 

① <App/>을 <BrowserRouter>로 감싸기 (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();

 

② HomePage & LoginPage 라우팅하기 (App.js)

function App() {
  return (
    <div>
      <Header />
      <Routes>
        <Route path="/" element={<HomePage/>} />
        <Route path="/login" element={<LoginPage/>} />
      </Routes>
      <Footer />
    </div>
  );
}

export default App;

➡ path가 "/"면 HomePage & LoginPage components를 읽을 것이라는 말

➡ 결국, 페이지는 하나고 객체만 바꿔치기 함!

 

⭐ exact={true} 를 꼭 넣어줘야 주소를 제대로 읽어줌!

 

 

 

2️⃣ 클릭했을 때 이동하기

 <Link to="경로">링크명</Link>

 

① Link to 태그로 링크 걸기

const Header = () => {
  return (
    <HeaderMenu backgroundColor="blue">
      <ul>
        <li>
          <Link to="/">홈</Link>
        </li>
        <li>
          <Link to="/login">로그인</Link>
        </li>
      </ul>
    </HeaderMenu>
  );
};

export default Header;

 

② 실행해보기

"/" 홈

 

"/login" 로그인

 

 

3️⃣ useParams 값으로 데이터 넘기기 ( v6부터 기존 match.params이 변경됨 )

🔎 useParams 
: Route path와 URL의 매칭에 대한 정보를 가지고 있음
- isExact:true이면 경로가 완전히 정확한 경우에만 수행함
- params: 경로에 전달된 파라미터 값을 가진 객체
- path: Route에 정의된 경로
- url: 클라이언트로부터 실제 요청 받은 경로
function App() {
  return (
    <div>
      <Header />
      <Routes>
        <Route path="/" element={<HomePage/>} />
        <Route path="/login/:id" element={<LoginPage/>} />
      </Routes>
      <Footer />
    </div>
  );
}
  •  :style 를 route path에 사용하면 useParams()로 이를 불러와 사용할 수 있다.
  • : 뒤에 나오는 부분이 params의 key 부분이 되어 :id는 id가 key가 되어 불러옴

 

 

 

4️⃣ useNavigate로 뒤로가기 & 홈으로가기 ( v6부터 기존 history 선언 방식이 변경됨 => history의 모든 기능이 useNavigate로 통합됨)

① 뒤로가기

import React from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import Login from '../components/login/Login';

const LoginPage = () => {
  const navigate = useNavigate();
  const goBack = () => {
    navigate(-1);
  };
  return (
    <div>
      <button onClick={goBack}>뒤로가기</button>
      <Login />
    </div>
  );
};

export default LoginPage;

② 홈으로 가기

const LoginPage = () => {
  const navigate = useNavigate();
  const goBack = () => {
    navigate(-1);
  };

  const goHome = ()=>{
    navigate('/');
  }

  return (
    <div>
      <button onClick={goBack}>뒤로가기</button>
      <button onClick={goHome}>홈으로</button>
      <Login />
    </div>
  );
};

 

5️⃣ Link 디자인하기

: Link라는 class가 없기 때문에 상속해서 써야 함

const HeaderLink = styled(Link)`
  color: red;
`;

const Header = () => {
  return (
    <HeaderMenu backgroundColor="blue">
      <ul>
        <li>
          <HeaderLink to="/">홈</HeaderLink>
        </li>
        <li>
          <HeaderLink to="/login/10">로그인</HeaderLink>
        </li>
      </ul>
    </HeaderMenu>
  );
};

 

 

 

6️⃣ 부트스트랩 사용하기1 - button

https://react-bootstrap.github.io/getting-started/introduction

 

React-Bootstrap

The most popular front-end framework, rebuilt for React.

react-bootstrap.github.io

npm install react-bootstrap bootstrap

 

① Home.js에 button 만들고

import { Button } from 'react-bootstrap';

<button variant="primary">Primary</button>{' '}

 

② App.js에 import하기

import 'bootstrap/dist/css/bootstrap.min.css';

 

③ 실행

 

7️⃣ 부트스트랩 사용하기2 - navbar

import React from 'react';
import { Container, Nav, Navbar } from 'react-bootstrap';
import { Link } from 'react-router-dom';
import styled from 'styled-components';

const HeaderMenu = styled.div`
  border: 1px solid black;
  height: 300px;
  background-color: ${(props) => props.backgroundColor};
`;

const HeaderLink = styled(Link)`
  color: red;
`;

const Header = () => {
  return (
    <div>
      <HeaderMenu backgroundColor="blue">
        <ul>
          <li>
            <HeaderLink to="/">홈</HeaderLink>
          </li>
          <li>
            <HeaderLink to="/login/10">로그인</HeaderLink>
          </li>
        </ul>
      </HeaderMenu>

      <>
        <Navbar bg="dark" variant="dark">
          <Container>
            <Navbar.Brand href="#home">Navbar</Navbar.Brand>
            <Nav className="me-auto">
              <Link to="/" className="nav-link">
                Home
              </Link>
              <Link to="/login" className="nav-link">
                Login
              </Link>
            </Nav>
          </Container>
        </Navbar>
      </>
    </div>
  );
};

export default Header;

➡ href로 링크를 이동하면 페이지가 reload 되므로 Link to로 변경 후 className을 걸어준다!

(※ className은 bootstrap 홈페이지 참고)

'- React' 카테고리의 다른 글

React dependency 오류  (0) 2022.11.11
React - nodejs 버전 변경하기  (0) 2022.11.08
styled-components 스타일 상속  (0) 2022.11.07
React - props(변수/함수 passing하기)  (0) 2022.11.07
React - Components styled 디자인  (0) 2022.11.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함