[React.js] router
ํ๊ทธ: development · reactjs · SPA · CSR · Route · Routing · switch · Link · useNavigate
router ๋
๋ผ์ฐํ - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
SPA(Single Page Application) ์ฑ๊ธํ์ด์ง๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ๋ ์ ์ ๊ฐ ์ฒ์ ์ ์ํ์๋ ๊ตฌ์ฒด์ ์ธ data๋ฅผ ์ ์ธํ ์ ์ ํ์ผ์ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ
๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ก ํ์ด์ง๋ฅผ ๋๋์ด ์ ์ ๊ฐ ์ ์ํ๋ url๋ง๋ค ๋ค๋ฅธ data๋ฅผ ๋ณด์ฌ์ค ์ ํ ์ ์์
ํ์ด์ง์ ๋ก๋ฉ ์์ด, ํ์ด์ง์ ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ ๋ ๋๋ง ํ์ฌ ๋ณด์ฌ์ฃผ๋๋ก ๋์์ค
์๋ก์ด ํ์ด์ง๋ฅผ ๋ก๋ํ์ง ์๊ณ ํ๋์ ํ์ด์ง ์์์ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๋ ํํ
CSR(Client Side Rendering)
์ต์ด ํ ๋ฒ HTML, static, js ๋ฑ์ ๋ค ๋ฐ์์์ ๋ก๋ฉํ๋ ๋ฐฉ์
์ดํ์๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์์ ๋๋ง๋ค ๋ฆฌ์์ค๋ฅผ ์๋ฒ์์ ์ ๊ณตํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ํด์ ํ ๋ ๋๋ง
ํด๋ผ์ด์ธํธ ์์ฒญ=> ๋ณํ๊ฐ ํ์ํ ์์ญ๋ง ์๋ฒ์ ์ ๋ฌ=> ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฆฌ์์ค ์ ๋ฌ=> ํด๋ผ์ด์ธํธ์์ view ์ฒ๋ฆฌ
SPA(Single Page App) ํ์์ ํ๋ก ํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(React, Vue)์ ๋ฐฉ์
(React SSR ๋ผ์ด๋ธ๋ฌ๋ฆฌ=Next.js, Vue SSR ๋ผ์ด๋ธ๋ฌ๋ฆฌ=Nuxt.js)
์ฒ์์ HTML์ ๋ํ ์ ๋ณด ๋น์ด ์์
yarn add react-router-dom
๊ณผ๊ฑฐ์ ๋ฒ์ ์ ์ฐ๊ณ ์ถ๋ค๊ณ ํ๋ฉด
package.json ์ด๊ธฐ
โreact-router-domโ: โ5โ,
์์ ํ
ํฐ๋ฏธ๋์์ yarn
yarn yarn
===============
ํ์ฌ 6 ๋ฒ์ ์ผ๋ก ๋ฐ๋
**[Declarative routing for React apps at any scale | React Router** |
Version 6 of React Router is here! React Router v6 takes the best features from v3, v5, and its sister project, Reach Router, in our smallest and most powerful package yet. reactrouter.com](https://reactrouter.com/)
https://reactrouter.com/docs/en/v6/upgrading/v5
importย {ย BrowserRouterย ,ย Routes,ย Route,ย Linkย }ย fromย "react-router-dom";
<Route path="์ฃผ์"ย element={ <๋ณด์ฌ์ฃผ๊ณ ์ถ์ ์ปดํฌ๋ํธ />ย }>
Switch => Routes๋ก
Route : ์ด๋ค๊ฒฝ๋ก๋ก ๋ค์ด์์๋ ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋ค.. ( ์ปดํฌ๋ํธ ๋ณด์ด๋ ์์ญ)
<Routes>
<Route path="/aaa" element={<Aaa />} />
<Route path="/bbb" element={<Bbb />} />
</Routes>
Link : Router์ ์ฃผ์๋ฅผ ๋ฐ๊ฟ a ํ๊ทธ์ง๋ง ์๋ก๊ณ ์นจ ์๋จ
<Link to="/">ํ</Link>
<Link to="/path์ฃผ์">์๊ฐ</Link>
<Link to="/about">์๊ฐ</Link>
useHistory ์ฌ๋ผ์ง - useNavigate ํจ์
history.push(โ/โ) -> navigate(โ/โ)