[React] Nested Routes : Route์•ˆ์— Route, Outlet

chxxrinยท2024๋…„ 4์›” 2์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
24/32
๐ŸŽค /path ์•ˆ์— ๋˜ ๋‹ค๋ฅธ path๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ

Route์•ˆ์— Route๋ฅผ ๋งŒ๋“ค์ž

<Route path="/about" element={<About/>}>    -> /about
    <Route path="**member**" element={<Member/>}/>     -> /about/member
    <Route path="**location**" element={<Location/>}/>     -> /about/location
</Route>

โ†’ /about/member ์ ‘์†์‹œ & ๋‘˜ ๋‹ค ๋ณด์ž„

โ†’ Route ์•ˆ์— Route๊ฐ€ ์˜ค๋„๋ก ํ•  ๋•Œ, path์— / ๋„ฃ์œผ๋ฉด ์•ˆ๋จ!!!

Nested Routes ์‚ฌ์šฉ๋ฐฉ๋ฒ•

  1. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑ( ์ด ๋•Œ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜์˜ฌ ๊ณณ์— ์„ ๊ผญ ์ž‘์„ฑ!!
function Event() {
  return (
    <div>
      <h4>์˜ค๋Š˜์˜ ์ด๋ฒคํŠธ</h4>
      **<Outlet/>**
    </div>
  )
}
  1. ๋ถ€๋ชจ Route๋ฅผ ์ž‘์„ฑ
<Route path="/event" element={<Event/>}>

</Route>
  1. Nested Route๋ฅผ ์‚ฌ์šฉํ•  ์ž์‹ Route๋ฅผ ์ž‘์„ฑ
<Route path="/event" element={<Event/>}>
	 <Route path="one" element={<div>์ฒซ ์ฃผ๋ฌธ์‹œ ์–‘๋ฐฐ์ถ”์ฆ™ ์„œ๋น„์Šค</div>} />
   <Route path="two" element={<div>์ƒ์ผ๊ธฐ๋… ์ฟ ํฐ๋ฐ›๊ธฐ</div>} />
</Route>

Nested Routes ์žฅ์ 

์žฅ์  1. route ์ž‘์„ฑ์ด ์•ฝ๊ฐ„ ๊ฐ„๋‹จํ•ด์ง

์žฅ์  2. nested route ์ ‘์†์‹œ์—” element 2๊ฐœ๋‚˜ ๋ณด์ž„(๋ถ€๋ชจ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ)

โ†’ ๋‚ด๋ถ€ ์–ด๋””์— ๋ณด์—ฌ์ค„์ง€ ์ •ํ•˜๋ ค๋ฉด ์„ ์จ์•ผ ๋‘˜ ๋‹ค ๋ณด์ž„

function About() {
  return (
    <div>
      <h4>ํšŒ์‚ฌ์ •๋ณด์ž„</h4>
      **<Outlet></Outlet> -> ์—ฌ๊ธฐ์— ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณด์ž„**
    </div>
  )
}

โ†’ nested routes์˜ element๋ณด์—ฌ์ฃผ๋Š” ๊ณณ์€

์žฅ์  3. ์ด๋Ÿฐ์‹์œผ๋กœ UI ๋งŒ๋“ค๋ฉด ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ์ด์šฉ ๊ฐ€๋Šฅ

์žฅ์  4. ํŽ˜์ด์ง€ ์ด๋™์ด ์‰ฌ์›€(UI ์Šค์œ„์น˜ ์กฐ์ž‘์ด ์‰ฌ์›€)

ex) ๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ๋‚ด์šฉ์ด ๋จผ์ € ๋‚˜์˜ค๊ณ  ๊ทธ ๋‹ค์Œ์— ์ž์‹ ์ปดํฌ๋„ŒํŠธ ๋‚ด์šฉ์ด ๋ณด์ž„

function About() {
  return (
    <div>
      <h4>ํšŒ์‚ฌ์ •๋ณด์ž„</h4>
      **<Outlet></Outlet> -> ์—ฌ๊ธฐ์— ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณด์ž„**
    </div>
  )
}

ex) ์ž์‹์ปดํฌ๋„ŒํŠธ๋‚ด์šฉ์ด ๋จผ์ € ๋‚˜์˜ค๊ณ  ๊ทธ ๋‹ค์Œ์— ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ๋‚ด์šฉ์ด ๋ณด์ž„

function About() {
  return (
    <div>
			**<Outlet></Outlet> -> ์—ฌ๊ธฐ์— ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณด์ž„**
      <h4>ํšŒ์‚ฌ์ •๋ณด์ž„</h4>
    </div>
  )
}

Q. Nested routes ์–ธ์ œ์”€?

์—ฌ๋Ÿฌ ์œ ์‚ฌํ•œ ํŽ˜์ด์ง€ ํ•„์š”ํ•  ๋•Œ(๊ธ€์ž ํ•˜๋‚˜, ๋ฐ•์Šค ํ•˜๋‚˜๋งŒ ๋ฐ”๋€Œ์–ด์•ผ ํ•  ๋•Œ)

์ˆ™์ œ

  1. Route ๋งŒ๋“ค๊ธฐ
<Route path="/event" element={<Event/>}>
          <Route path="one" element={<div>์ฒซ ์ฃผ๋ฌธ์‹œ ์–‘๋ฐฐ์ถ”์ฆ™ ์„œ๋น„์Šค</div>}/>
          <Route path="two" element={<div>์ƒ์ผ๊ธฐ๋… ์ฟ ํฐ๋ฐ›๊ธฐ</div>}/>
</Route>
  1. Component๋งŒ๋“ค๊ณ , ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ž๋ฆฌ์—
function Event() {
  return (
    <div>
      <h4>์˜ค๋Š˜์˜ ์ด๋ฒคํŠธ</h4>
      <Outlet></Outlet>
    </div>
  )
}

์ „์ฒด์ฝ”๋“œ

import './App.css';
import {Button, Navbar, Container, Nav} from 'react-bootstrap';
import data from './data';
import { useState } from 'react';
import {Routes, Route, Link, useNavigate, Outlet} from 'react-router-dom';
import Detail from './Detail.js';

function App() {

  let [shoes] = useState(data);
  let navigate = useNavigate();

  return (
    <div className="App">
      <Navbar bg="light" variant="light">
        <Container>
          <Navbar.Brand href="#home">ShoeShop</Navbar.Brand>
          <Nav className="me-auto">
            <Nav.Link onClick={()=>{ navigate('/') }}>Home</Nav.Link>
            <Nav.Link onClick={()=>{ navigate('/detail') }}>Cart</Nav.Link>
          </Nav>
        </Container>
      </Navbar>

      <Routes>
        <Route path="/" element={
                  <>
                  <div className="main-bg"></div>
                  <div className="container">
                    <div className="row">
          
                      {
                        shoes.map((a,i)=>{
                          return (
                            <Card shoes={shoes[i]} i={i}></Card>
                          )
                        })
                      }
                    </div>
                  </div>
                  </>
        }/>
        <Route path="/detail" element={<Detail/>}/>
        <Route path="/about" element={<About/>}>
          <Route path="member" element={<div>member</div>} />
          <Route path="location" element={<div>location</div>} />
        </Route>
        <Route path="/event" element={<Event/>}>
          <Route path="one" element={<div>์ฒซ ์ฃผ๋ฌธ์‹œ ์–‘๋ฐฐ์ถ”์ฆ™ ์„œ๋น„์Šค</div>}/>
          <Route path="two" element={<div>์ƒ์ผ๊ธฐ๋… ์ฟ ํฐ๋ฐ›๊ธฐ</div>}/>
        </Route>
        <Route path="*" element={<div>404ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.</div>}></Route>
      </Routes>

    </div>
  );
}

function Card(props) {
  return (
          <div className="col-md-4">
            <img src={'https://codingapple1.github.io/shop/shoes' + (props.i+1) +'.jpg'} width="80%"/>
            <h4>{props.shoes.title}</h4>
            <p>{props.shoes.price}</p>
          </div>
  )
}

function About(){
  return (
    <div>
      <h4>office detail</h4>
      <Outlet></Outlet>
    </div>
  )
}

function Event() {
  return (
    <div>
      <h4>์˜ค๋Š˜์˜ ์ด๋ฒคํŠธ</h4>
      <Outlet></Outlet>
    </div>
  )
}
export default App;

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด