โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
React Router
์ฌ๋ฌ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ํ์ด์ง๋ณ๋ก ์ปดํฌ๋ํธ๋ค์ ๋ถ๋ฆฌํด๊ฐ๋ฉด์ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ด ๋ฐ๋ก ๋ผ์ฐํ ์์คํ ์ด๋ค.
React๋ฅผ ์ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ์ธก ๋ผ์ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. React๊ฐ ์คํ๋๋ ๋ชจ๋ ๊ณณ(nodejs, react native, web ๋ฑ)์์ ์คํ๋๋ค.
๋ฆฌ์กํธ ํ๋ก์ ํธ์ ํ๋ ์์ํฌ์ด๋ค. cra ์ฒ๋ผ ์ฌ๋ฌ ์ค์ , SSR ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ next.js๋ ํ์ผ ๊ฒฝ๋ก ๊ธฐ๋ฐ์ผ๋ก ๋ผ์ฐํธ๊ฐ ์๋ํ๋ค.
BrowserRouter
๋ HTML5dml History API๋ฅผ ์ฌ์ฉํ์ฌ URL๊ณผ UI๋ฅผ ๋๊ธฐํํด์ฃผ๋ Router์ด๋ค.
ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ง ์์๋ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ฃผ๊ณ , ํ์ฌ ์ฃผ์์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ props๋ก ์กฐํ ๋ฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค.
๋ฆฌ์กํธ ๋ผ์ฐํฐ ๋์ ์ ์ฉํ๊ณ ์ถ์ ์ปดํฌ๋ํธ์ ์ต์์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ์ฃผ๋ ์ปดํฌ๋ํธ์ด๊ธฐ ๋๋ฌธ์ App์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
// cra๋ก ์์ฑํ ์ฑ์์ index.js
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>
๊ฐ ํ์ด์ง์์ ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ฅผ ์๋์ฒ๋ผ ๋ง๋ ๋ค.
๐ฆpages
โฃ ๐LoginPage.js
โฃ ๐MainPage.js
โ ๐SignUpPage.js
// MainPage.js
const MainPage = () => {
return <div>Main</div>
}
export default MainPage
react router v6๋ Route๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋ค.
<Route path="์ฃผ์" element={๋ณด์ฌ ์ค ์ปดํฌ๋ํธ } />
// main, login, sign-upํ์ด์ง ๋ผ์ฐํธ ์ค์
<Routes>
<Route path="/" element={<MainPage />} />
<Route path="/login" element={<LoginPage />} />
<Route path="/sign-up" element={<SignUpPage />} />
</Routes>
์๋ฌด๋๋ ํ๋ก์ ํธ ์ด๊ธฐ ์ค์ ์ด๋ค ๋ณด๋ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ๋ง ์ค์ ํด๋์๋ค. ์ฒ์์๋ ์ด๋ ๊ฒ ์์ํ๊ณ ์ฐจ์ฐจ ํ์ด์ง๋ ๋ด์ฉ๋ ๋ง์์ง ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ์ค์ ํด ์ค ๊ฒ ๊ฐ๋ค.
๋ค๊ฐ์ด ์ฌ์ฉํ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๋ ์ ์คํด์ง๊ณ ์กฐ์ฌ์ค๋ฌ์ ์ง๋ ๋ถ๋ถ์ด๋ค. ๊ทธ๋์ ๋์ฑ ํ์ฅ์ฑ ์๊ฒ ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์๋ค.