๋ชฉ์ฐจ
์ด์ ๊ธ โผ
0. 2023.05.05 - [๐ | WEB DEV/React] - [React] 0. React๋ฅผ ์ฌ์ฉํ๋ ์ด์ & ์ด๊ธฐ ์ธํ
1. 2023.05.07 - [๐ | WEB DEV/React] - [React] 1. JSX
2. 2023.05.26 - [๐ | WEB DEV/React] - [React] 2. state (๋ณ์, array, object)
2-1. 2023.05.27 - [๐ | WEB DEV/React] - [React] 2-1. array state ์ ๋ ฌํ๊ธฐ ( .sort()ํ์ฉ)
3. 2023.05.28 - [๐ | WEB DEV/React] - [React] 3. ์ปดํฌ๋ํธ (Component)
4. 2023.05.28 - [๐ | WEB DEV/React] - [React] 4. ๋์ ์ธ UI ์ ์ํ๊ธฐ
5. 2023.05.28 - [๐ | WEB DEV/React] - [React] 5. ๋ฐ๋ณต๋๋ ๋ถ๋ถ ์ถ์ฝํ๊ธฐ (map)
6. 2023.05.29 - [๐ | WEB DEV/React] - [React] 6. props
8. 2023.07.06 - [๐ | WEB DEV/React] - [React] 8. ๋ค๋ฅธ ํ์ผ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
์ ๋ฒ ํฌ์คํธ์ ์ด์ด์ 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) ํ์ด์ง ๋ด ๋ชฉ๋ก ์กฐํ ๋ฑ
๋ํ ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ์ด์ฉํ ์ ์๊ณ , ํ์ด์ง ์ด๋์ด ์ฝ๋ค๋ ์ฅ์ ์ ์ด์ฉํด ๋ค์ํ๊ฒ ํ์ฉํ ์ ์๋ค!
'๐ | WEB DEV > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] 12. Styled-components (+ ํ ์ปดํฌ๋ํธ์ cssํ์ผ ์ ์ฉ๋ฒ) (1) | 2023.10.04 |
---|---|
[React] 11. ๋ผ์ฐํ -3 ์์ฐํ ๋ผ์ฐํ (2) | 2023.10.03 |
[React] 9. ๋ผ์ฐํ -1 (react-router-dom์ธํ , Routes, Route, Link) (0) | 2023.07.09 |
[React] 8. ๋ค๋ฅธ ํ์ผ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ (0) | 2023.07.06 |
[React] 7. ์ด๋ฏธ์ง ์ฝ์ ํ๊ธฐ(css, html, publicํด๋์์ ๊ฐ์ ธ์ค๊ธฐ) (0) | 2023.07.03 |
๋๊ธ