React - Router

김기만·2022년 1월 10일
0

React

목록 보기
3/5

1. SPA

1. SPA(Single Page Application)란?
    1. 페이지가 1개인 어플리케이션을 의미함. -> 다른 여러 개의 페이지를 보여주기 위해 Routing을 함.
2. 사용 이유
    1. 렌더링을 위한 서버 자원 및 불필요한 트래픽 낭비를 줄이기 위해
3. 단점
    1. 앱의 규모가 커지면 자바스크립트 파일 사이즈가 커짐 -> 유저가 실제로 방문하지 않을수도 있는 페이지에 관련된 렌더링 관련 스크립트도 불러오기 때문
    2. 위 단점은 Code Splitting을 통해 라우트별로 파일을 나눠 트래픽과 로딩속도를 개선할 수 있음..

2. Routing

1. Routing이란 다른 경로(url 주소)에 따라 다른 화면을 보여주는 것
2. React 자체에는 해당 기능이 내장되어 있지 않음 -> React가 Framework가 아닌 Library인 이유
3. React-router는 리액트의 라우팅 기능을 위해 가장 많이 사용되는 라이브러리임.(Third-Party Library)  

3. React Router

1. React-router 설치
npm install react-router-dom --save
2. Router 컴포넌트 구현하기
import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom";

import Nav from "./components/Nav/Nav";
import Footer from "./components/Footer/Footer";
import Login from "./pages/Login/Login";
import Signup from "./pages/Signup/Signup";
import Main from "./pages/Main/Main";

function Router() {
  return (
    <BrowserRouter>
      <Nav /> 
      <Routes>
        <Route path="/" element={<Login />} />
        <Route path="/signup" element={<Signup />} />
        <Route path="/main" element={<Main />} />
      </Routes>
      <Footer /> 
    </BrowserRouter>
  );
}

export default Router;
3. Index.js
    1. ReactDOM.render(<Router />, document.getElementById('root'));
    2. 기존에 입력된 <App />컴포넌트를 <Router />로 수정해야함.(기능 적용을 위해)
4. Route 이동하기
    1. Link 컴포넌트 사용하는 방법
import React from "react";
import { Link } from "react-router-dom";

function Login() {
  return (
    <div>
      <Link to="/signup">회원가입</Link>
    </div>
  );
}

export default Login;
        1. <a> -> 외부 사이트로 이동하는 경우, <link> 프로젝트 내에서 페이지 전환하는 경우
        2. 클릭 시 바로 이동하는 로직 구현 시에 사용함.
    2. useNavigation로 구현하는 방법
import React from "react";
import { useNavigate } from "react-router-dom";

function Login() {
  const navigate = useNavigate();

  const goToMain = () => {
    navigate("/main");
  };

  // 실제 활용 예시
  // const goToMain = () => {
  //   if(response.message === "valid user"){
  //     navigate('/main');
  //   } else {
  //     alert("가입된 회원이 아닙니다. 회원가입을 먼저 해주세요.")
  //     navigate('/signup');
  //   }
  // }

  return (
    <div>
      <button className="loginBtn" onClick={goToMain}>
        로그인
      </button>
    </div>
  );
}
export default Login; 
        1. 페이지 전환 시 추가로 처리해야 하는 로직이 있는 경우 useNavigate 훅을 활용하여 구현함
profile
나도 누군가의 12시다. by.하스스톤 야생

0개의 댓글