๊ด€๋ฆฌ ๋ฉ”๋‰ด

ruriruriya

[React] ๋ฆฌ์•กํŠธ - React์—์„œ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ๋งŒ๋“ค๊ธฐ(react-router ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ๋ณธ๋ฌธ

๐Ÿ–Œ๏ธWeb/React

[React] ๋ฆฌ์•กํŠธ - React์—์„œ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ๋งŒ๋“ค๊ธฐ(react-router ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

๋ฃจ๋ฆฌ์•ผใ…‘ 2024. 5. 7. 22:47
๋ฐ˜์‘ํ˜•

react์—์„œ๋Š” ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๊นŒ?
react-router ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ชจ๋“ˆํ™” ์‹œํ‚ค๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ผ์šฐํŒ… ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

react-router ์ฃผ์š” ๊ธฐ๋Šฅ

  1. ๋™์  ๋ผ์šฐํŒ…( Dynamic Routing) : ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ •  URL์— ์ ‘๊ทผํ•  ๋•Œ ํ•ด๋‹น URL์— ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋ง
  2. ๋ผ์šฐํŠธ ๊ฐ€๋“œ(Route Guards) : ์‚ฌ์šฉ์ž ์ธ์ฆ ์ƒํƒœ ๋“ฑ์— ๋”ฐ๋ผ ํŠน์ • ๋ผ์šฐํŠธ๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Œ.
  3. ๋ ˆ์ด์•„์›ƒ ๊ด€๋ฆฌ : 'Outlet'๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌ
  4. ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ „๋žต : ๋กœ๋”ฉ๊ณผ ํŽ˜์นญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ 'Loader' ๊ธฐ๋Šฅ์ด ์ œ๊ณต
  5. ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…(Code Splitting) :  'React.lazy'์™€ 'Suspense'๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ผ์šฐํŠธ๋งŒ ๋กœ๋“œํ•˜๊ณ , ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฒˆ๋“ค์„ ๋กœ๋“œํ•ด์„œ ํšจ์œจ์ ์ธ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์„ ๋„๋ชจ

 

react-router ์˜ˆ์‹œ

  1. ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”(Navigation Bar): Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๊ฒฝ๋กœ๋กœ์˜ ๋งํฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋งํฌ๋“ค์€ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ๊ฒฝ๋กœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋„๋ก ์„ค์ •๋œ๋‹ค.
  2. Routes์™€ Route: ๊ฐ Route๋Š” ํŠน์ • ๊ฒฝ๋กœ์— ๋Œ€์‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•œ๋‹ค. Routes ์ปดํฌ๋„ŒํŠธ๋Š” ์ด๋Ÿฌํ•œ Route ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ๋ฉฐ, URL์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋„๋ก ๋„์™€์ค€๋‹ค.
  3. ๋ณดํ˜ธ๋œ ๋ผ์šฐํŠธ(Protected Route): ProtectedRoute ์ปดํฌ๋„ŒํŠธ๋Š” ํŠน์ • ์กฐ๊ฑด(์˜ˆ: ์‚ฌ์šฉ์ž ์ธ์ฆ)์ด ์ถฉ์กฑ๋  ๋•Œ๋งŒ ์ปดํฌ๋„ŒํŠธ์— ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•œ๋‹ค. ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
// App.js
import React from 'react';
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
import HomePage from './HomePage';
import AboutPage from './AboutPage';
import DashboardPage from './DashboardPage';
import ProtectedRoute from './ProtectedRoute';

function App() {
  return (
    <Router>
      <div>
        {/* ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” */}
        <nav>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/about">About</Link>
            </li>
            <li>
              <Link to="/dashboard">Dashboard</Link>
            </li>
          </ul>
        </nav>
        
        {/* ๋ผ์šฐํŠธ ์„ค์ • */}
        <Routes>
          <Route path="/" element={<HomePage />} />
          <Route path="/about" element={<AboutPage />} />
          <Route path="/dashboard" element={<ProtectedRoute><DashboardPage /></ProtectedRoute>} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

 

  1.  

 

๋ฐ˜์‘ํ˜•