[React] React Route์ ๋ํด ์์๋ณด์
๋ผ์ฐํ ์ด๋?
= ๋คํธ์ํฌ ์์์ url์ ์ด์ฉํ์ ๋ ์ด๋ค ๊ฒฝ๋ก๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๊ฑด์ง ๊ฒฐ์ ํด์ฃผ๋ ๊ธธ์ ๊ฒฐ์ ํด์ฃผ๋ ๊ฒ
= ์ฌ์ฉ์๊ฐ url์ ์์ฒญํ์ ๋ ์ด๋ค ํน์ ํ ํ์ด์ง๋ก ์ฐ๊ฒฐํ ๊ฑด์ง ๊ฒฐ์ ํ๋ ๋งค์ปค๋์ฆ
= ์ฌ์ฉ์๊ฐ url์ ์คฌ์ ๋ ์ด๋ค ํ์ด์ง๋ก ์ฐ๊ฒฐํ๊ฑด์ง!
SPA์ ๋ฌธ์ ์
์ฌ์ฉ์๊ฐ ๋ถ๋งํฌํ ์ ์๋ค. ๋ธ๋ผ์ฐ์ ์์์ ๋ค๋ก๊ฐ๊ธฐ, ์์ผ๋ก๊ฐ๊ธฐ์ ๊ฐ์ ๋ค๋น๊ฒ์ด์ ์ด ์ถ๊ฐ๊ฐ ๋์ง ์์
⇒ ํด๋น ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด React Router ๋ฑ์ฅ
React Router?
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ฃผ์๋ฅผ ๊ฐ์งํ๋ ์ญํ ์ ํ๋ค.
import { BrowerRouter, Link, Router, Routes } from 'react-router-dom'
<BrowerRouter> ํ๊ทธ๋ก ๊ฐ์ธ์ค๋ค.
<BrowerRouter>
</BrowerRouter>
<Routes> ํ๊ทธ๋ก path๋ง๋ค ๋ฌด์จ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค๊ฑด์ง ์์ฑํ๋ค.
<BrowerRouter>
<Routes>
<Route path='/' exact element={<Home />}>
<Route path='/home' exact element={<Home />}>
<Route path='/profile' exact element={<Profile />}>
</Routes>
</BrowerRouter>
<Link> ํ๊ทธ๋ฅผ ํตํด ํด๋ฆญ ์ ์๋์ผ๋ก url์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ ์ ์๋ค.
<BrowerRouter>
<nav>
<Link to='/'>Home</Link>
<Link to='/Profile'>Profile</Link>
</nav>
<Routes>
<Route path='/' exact element={<Home />}>
<Route path='/home' exact element={<Home />}>
<Route path='/profile' exact element={<Profile />}>
</Routes>
</BrowerRouter>
Route ์ฌ์ฉ ์ path๋ฅผ ์ฌ๋ฌ ๊ฐ ์ง์ ํ์ ๊ฒฝ์ฐ exact๋ฅผ ์ง์ ํด์ฃผ์.
v6๋ถํฐ Route ์ฌ์ฉ๋ฒ์ด ์๋ ์ฝ๋์ ๊ฐ์ด element๋ฅผ ์ง์ ํ๋ ๊ฒ์ผ๋ก ๋ฐ๋์๋ค.
<Route path='/' exact element={<Home />}>
<Route path='/home' exact element={<Home />}>
<Route path='/profile' exact element={<Profile />}>
๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ Hook
v6๋ฒ์ ๋ถํฐ useHistory() ⇒ useNavigate()๋ก ๋ณ๊ฒฝ!
const history = useHistory();
history.push('/maker'); // v5
///////////////
const navigate = useNavigate();
navigate('/maker'); // v6
navigate(
'/maker',
{ state: {id: ~~~} }); // ํ์ด์ง ์ด๋ํ ๋ ์ธ์ ์ ๋ฌ ๋น์ฐํ ๊ฐ๋ฅ