๋ฆฌ์กํธ๋ SPA๊ธฐ์ ํ๋์ index.html ํ ํ๋ฆฟ ํ์ผ์ ๊ฐ๊ณ ์์
์ด ํ๋์ ํ ํ๋ฆฟ์ JS๋ฅผ ์ด์ฉํด์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ
์ด index.html ํ ํ๋ฆฟ์ ๋ฃ์ผ๋ฏ๋ก ํ์ด์ง๋ฅผ ๋ณ๊ฒฝํด์ฃผ๊ฒ ๋จ
์ด๋ ์ด React Router Dom ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ปดํฌ๋ํธ๋ก
๋ผ์ฐํ /ํ์์ ํ๊ณ ๋ ๋๋ง ํ๋ ๋ฐ ๋์์ ์ฃผ๊ฒ ๋จ
์ฌ์ฉํ๋ฉด ์น ์ฑ์์ ๋์ ๋ผ์ฐํ ์ ๊ตฌํํ ์ ์์โ
๋ผ์ฐํ ์ด ์คํ ์ค์ธ ์ฑ ์ธ๋ถ์ ๊ตฌ์ฑ์์ ์ฒ๋ฆฌ๋๋
๊ธฐ์กด ๋ผ์ฐํ ์ํคํ ์ฒ์ ๋ฌ๋ฆฌ React Router Dom์
์ฑ ๋ฐ ํ๋ซํผ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ์ฉ์ดํ๊ฒ ํจ
npm install react-router-dom

BrowserRouter
๐ HTML5 History API(pushState, replaceState ๋ฐ popstate ์ด๋ฒคํธ)๋ฅผ
์ฌ์ฉํ์ฌ UI๋ฅผ URL๊ณผ ๋๊ธฐํ๋ ์ํ๋ก ์ ์งํด์ค
HTML5์ History API ์ฌ์ฉํ์ฌ ํ์ด์ง
์๋ก๊ณ ์นจ ํ์ง ์๊ณ ๋ ์ฃผ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํด์ค
์ด๊ฑธ ํด๋ฆญํ๋ค๊ณ ๊ฐ์ ํ์ ๋
ํ์ด์ง๊ฐ ์์ ๋ฆฌํ๋ ์ฌ ๋๋ฉด์ ์ด๋์ ํ๊ฒ ๋จ
๋ฆฌ์กํธ์์์ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์๋ state๊ฐ ์ด๊ธฐํ ๋จ
๊ฐ๊ณ ์๋ state๋ ์ ์งํด์ค์ผ ํจ
Routes
์ฑ์์ ์์ฑ๋ ๋ชจ๋ ๊ฐ๋ณ ๊ฒฝ๋ก์ ๋ํ ์ปจํ ์ด๋/์์ ์ญํ ์ ํจ
Route๋ก ์์ฑ๋ ์์ ์ปดํฌ๋ํธ ์ค์์ ๋งค์นญ๋๋ ์ฒซ๋ฒ์งธ Route๋ฅผ ๋ ๋๋งํด์ค
Route
๋จ์ผ ๊ฒฝ๋ก ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋จ ( ๋๊ฐ์ง ์์ฑ์ ์ทจํจ )
path : ์ํ๋ ์ปดํฌ๋ํธ์ URL ๊ฒฝ๋ก๋ฅผ ์ง์
์ด ๊ฒฝ๋ก๋ ์ด๋ฆ์ ์ํ๋ ๋๋ก ์ ํ ์ ์์
์ฒซ๋ฒ์งธ ๊ฒฝ๋ก ์ด๋ฆ์ด ๋ฐฑ์ฌ๋์(/)์์ ์ ์ ์์
๊ฒฝ๋ก ์ด๋ฆ์ด ๋ฐฑ์ฌ๋์์ธ ์ปดํฌ๋ํธ๋ ์ฑ์ด
์ฒจ ๋ก๋๋ ๋๋ง๋ค ๋จผ์ ๋ ๋๋ง ๋จ
์ด๋ ํ ๊ตฌ์ฑ ์์๊ฐ ๋ ๋๋ง๋๋ ์ฒซ ๋ฒ์งธ ๊ตฌ์ฑ ์์๊ฐ ๋จ์ ์๋ฏธ
React Router์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋,
๋ณต์กํ ๋ ์ด์์ ์ฝ๋๋ฅผ ์ด์ง๋ฝํ ํ์๊ฐ ์์
๋๋ถ๋ถ์ ๋ ์ด์์์ URL์ ์ธ๊ทธ๋จผํธ์ ์ฐ๊ฒฐ๋๋ฉฐ
React Router๋ ์ด๋ฅผ ์์ ํ ์์ฉํจ
localhost:3000/ ์ฌ๊ธฐ๋ก ์ ๊ทผํ๋ค๊ณ ํ์ ๋localhost:3000/teams
๐ App & Teams
์ฌ๊ธฐ์ Team์ 1.2.3.4... ์ฌ๋ฌ ๊ฐ์ Team์ด ์์๊ฑฐ์
:teamId๋ ๋ค์ด๋๋ฏนํ๊ฒ ํ์ id๊ฐ ์ฌ ๊ฑฐ๋ผ๋ ๊ฒ
๐ localhost:3000/teams/7 ( ์ด๋ฐ ์์ผ๋ก teams ๋ค์ ์ฌ ๊ฒ )
์คํํ๋ฉด App & Teams & Team์ด ๋ ๋๋ง ๋จ
NewTeamForm์ด ๋ ๋๋ง ๋๋ ค๋ฉด ์ด๋ ํ ๊ฒฝ๋ก๋ก ์ ๊ทผํด์ผ ํ ๊นโ
๐ localhost:3000/teams/new
์์ ๊ฒฝ๋ก ์์ ๋ ๋๋งํ๋ ค๋ฉดโ
๐ ๋ถ๋ชจ ๊ฒฝ๋ก ์์์์ Outlet ํ๊ทธ ์ฌ์ฉํด์ผ ํจโ
์ด๋ ๊ฒ ํ๋ฉด ํ์ ๊ฒฝ๋ก๊ฐ ๋ ๋๋ง๋ ๋ ์ค์ฒฉ๋ UI ํ์๋ ์ ์์
๋ถ๋ชจ ๋ผ์ฐํธ๊ฐ ์ ํํ ์ผ์นํ๋ฉด ์์ ์ธ๋ฑ์ค ๋ผ์ฐํธ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋
์ธ๋ฑ์ค ๋ผ์ฐํธ๊ฐ ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ๋ ๋๋ง ํ์ง ์์๐ โโ๏ธ
react-router-dom์์ ๊ฐ์ ธ์์ ์ฌ์ฉ๐ฅ
react-router-dom์์ ์ ๊ณตํ๋ ํจ์โ
ํจ์์ธ๋ฐ ํจ์๋ฅผ ์์ฑํ๋ ํจ์๐
useParams HooksโกRoute path์ ์ผ์นํ๋
ํ์ฌ URL์์ ๋์ ๋งค๊ฐ๋ณ์์ ํค/๊ฐ ์ ๊ฐ์ฒด๋ฅผ ๋ฐํ๐
:style ๋ฌธ๋ฒ์ path ๊ฒฝ๋ก์ ์ฌ์ฉํ๋ค๋ฉด useParams( )๋ก ์ฝ์ ์ ์์
์๋๋ :invoiceId๊ฐ ๋ฌด์์ธ์ง ์๊ธฐ์ํด useParams๋ฅผ ์ฌ์ฉํ์
์ด Hooks ์ด์ฉํด์ ํ์ฌ URL ์ ๋ณด ๊ฐ์ ธ์ฌ ์ ์์
๐ ํ์ฌ ์์น ๊ฐ์ฒด๋ฅผ ๋ฐํ๐
์ด๊ฒ์ ํ์ฌ ์์น ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ผ๋ถ
side effect ์ํํ๋ ค๋ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์์
useRoutes Hooks์ ์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋์ผํ์ง๋ง
์์ ๋์ JS ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก๋ฅผ ์ ์
์ด๋ฌํ ๊ฐ์ฒด๋ ์ผ๋ฐ ์์์ ๋์ผํ ์์ฑ ๊ฐ์ง๋ง JSX ํ์ํ์ง ์์์ผ์ชฝ ์ฒ๋ผ ๋ง๋ค ์๋ ์๊ณ ์ค๋ฅธ์ชฝ ์ฒ๋ผ ๋ง๋ค ์๋ ์์ (์ ํํด์ ์ฌ์ฉ)