๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/React

[React] 10. ๋ผ์šฐํŒ…-2 (useNavigate, 404page, Nested Routes, Outlet)

by KASSID 2023. 7. 10.

๋ชฉ์ฐจ

    728x90

    ์ด์ „ ๊ธ€ โ–ผ

    ๋”๋ณด๊ธฐ

     

     

    ์ €๋ฒˆ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ React์˜ ๋ผ์šฐํŒ…์— ๋Œ€ํ•ด์„œ ์ข€ ๋” ์•Œ์•„๋ณด์ž.

     

    0. ์„ธํŒ…

    import { Routes, Route, Link, useNavigate, Outlet } from 'react-router-dom'

     

    ์ง€๋‚œ ๋ฒˆ importํ•œ ๊ฒƒ์— ์ถ”๊ฐ€๋กœ useNavigate์™€ Outlet์„ ๊ฐ€์ ธ์˜จ๋‹ค.

     

     

    1. useNavigate

    ํŽ˜์ด์ง€ ์ด๋™๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

     

    Link์˜ ๊ฒฝ์šฐ aํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

     

    useNavigate()๋ผ๋Š” ํ›…์˜ ๊ฒฝ์šฐ ๊ฒฝ๋กœ๋ฅผ ์ธ์ž๊ฐ’๋กœ ์ „๋‹ฌํ•˜๋ฉด ํ•ด๋‹น path๋กœ ์ด๋™์„ ํ•œ๋‹ค.

    ๋˜ํ•œ ์ˆซ์ž๋ฅผ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ, ํ˜„์žฌ ๊ธฐ์ค€ ๋’ค๋กœ ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ ๊ฐ€๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ( + : ์•ž / - : ๋’ค )   ex)  -1 : ๋’ค๋กœ 1๋ฒˆ | 1: ์•ž์œผ๋กœ ํ•œ๋ฒˆ

     

     

    ์˜ˆ์‹œ

    function App(){
      return(
        ...
        
        let navigate = useNavigate();
        <>
          ...
          
          <div onClick={ navigate('/๊ฒฝ๋กœ') }></div> //ํด๋ฆญ ์ด๋ฒคํŠธ -> ํŽ˜์ด์ง€ ์ด๋™
        </>
      )
    }

     

    ์ด์ฒ˜๋Ÿผ onClick ๋“ฑ์˜ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ์— ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    2. 404 ํŽ˜์ด์ง€

    ์กด์žฌํ•˜์ง€ ์•Š๋Š” path์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋‚ด์šฉ์„ ์„œ๋ฒ„์—์„œ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ์ฝ”๋“œ์ธ 404๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    ์ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์œ ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•œ๋‹ค!

     

    <Route path="*" element={ ... }/>

     

    *๋ฅผ ์ด์šฉํ•ด ์ง€์ •ํ•œ path ์™ธ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์š”์ฒญ์— ๋Œ€ํ•ด 404ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    ์˜ˆ์‹œ

    <Route path='*' element={
      <div className="error404">
        ์—†๋Š” ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.
      </div> 
    }></Route>

     

     

     

    3. Nested Routes (์„œ๋ธŒ๊ฒฝ๋กœ ๋ฌธ๋ฒ•)

     

    path ์„ค์ •์„ ํ•  ๋•Œ ์˜ˆ๋ฅผ ๋“ค์–ด about/info, about/history ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋กœ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

    ์ฆ‰, ์„œ๋ธŒ ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. 

    ์ด๋•Œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    1) ์ง๊ด€์ ์œผ๋กœ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•

    ๋จผ์ € Nested Routes ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•œ๋‹ค.

     

    ์˜ˆ์‹œ

    <Route path="/about/info" element={ ... } />
    <Route path="/about/history" element={ ... } />

     

    ์ด ๋ฐฉ์‹์€ ์„œ๋ธŒ ๊ฒฝ๋กœ๋กœ ์ ‘๊ทผํ•  ๋•Œ ๋ถ€๋ชจ ๊ฒฝ๋กœ์— ์กด์žฌํ•˜๋Š” ์š”์†Œ๋Š” ๋ณด์ด์ง€ ์•Š๊ณ 

    ์„œ๋ธŒ ๊ฒฝ๋กœ์— ์ง€์ •ํ•œ ์š”์†Œ๋“ค๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

     

     

    2) Nested Routes ๋ฌธ๋ฒ• ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

    ํ•˜๋‚˜์˜ <Route>์˜ ๋‚ด๋ถ€์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ <Route>๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ Nested Routes ๋ฌธ๋ฒ•์ด๋‹ค.

     

    <Route path="/about" element={ 
      <>
        <Outlet/>
      </> }>
      <Route path="info" element={ ... } />
      <Route path="history" element={ ... } />
    </Route>

     

    ์ด ๋ฐฉ์‹์€ ๋ถ€๋ชจ ๊ฒฝ๋กœ์˜ ์š”์†Œ๊นŒ์ง€ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    ์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€ ๋ถ€๋ชจ ๊ฒฝ๋กœ์˜ ์š”์†Œ์—์„œ ์„œ๋ธŒ ๊ฒฝ๋กœ์˜ ์š”์†Œ๊ฐ€ ์กด์žฌํ•  ์œ„์น˜๋ฅผ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค.

     

     

    <Outlet/> ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด ๊ทธ ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.

     

     

    ๋‘ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด์ )

    ๋ถ€๋ชจ&์„œ๋ธŒ ๊ฒฝ๋กœ ๋ชจ๋‘ Nested Routes ๋ฌธ๋ฒ•
    ์„œ๋ธŒ ๊ฒฝ๋กœ์˜ ์š”์†Œ๋งŒ ๋ฐ˜ํ™˜ ๋ถ€๋ชจ ๊ฒฝ๋กœ & ์„œ๋ธŒ ๊ฒฝ๋กœ ์š”์†Œ ๋ชจ๋‘ ๋ฐ˜ํ™˜

     

    3) Nested Routes ๋ฌธ๋ฒ•์„ ์–ด๋””์—?

    -> ๋™์ ์ธ UI ๋งŒ๋“ค๊ธฐ!

     

    ์ด ๋ฐฉ๋ฒ•์€ ๋ถ€๋ชจ ๊ฒฝ๋กœ์˜ ์š”์†Œ๋Š” ์œ ์ง€๋˜์ง€๋งŒ ์„œ๋ธŒ ๊ฒฝ๋กœ์˜ ์š”์†Œ๋งŒ ์ „ํ™˜๋œ๋‹ค.

    ์ฆ‰, ํŽ˜์ด์ง€ ๋‚ด์—์„œ ์ผ๋ถ€๋งŒ ์กฐ๊ธˆ์”ฉ ๋ฐ”๋€Œ์–ด์•ผ ํ•  ๋•Œ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ex) ํŽ˜์ด์ง€ ๋‚ด ๋ชฉ๋ก ์กฐํšŒ ๋“ฑ

     

    ๋˜ํ•œ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ํŽ˜์ด์ง€ ์ด๋™์ด ์‰ฝ๋‹ค๋Š” ์žฅ์ ์„ ์ด์šฉํ•ด ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

     

     

     

    ๋Œ“๊ธ€