๐๋ผ์ฐํ
์ด๋?
- ์ฌ์ฉ์๊ฐ ์์ฒญํ URL์ ๋ฐ๋ผ ํด๋น URL์ ๋ง๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ.
- ๋ฆฌ์กํธ์์๋ ๋ผ์ฐํ
๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง์ด ์๋๋ฐ, ์ด์ค ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)๋ฅผ ์ฌ์ฉํด๋ณด๋ ค ํ๋ค.
๐๋ฆฌ์กํธ ๋ผ์ฐํฐ(React Router)
- ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ฃผ์๋ฅผ ๊ฐ์งํ๋ ์ญํ ์ ํ๋ฉฐ, ์ฌ๋ฌ ํ๊ฒฝ์์ ๋์ํ ์ ์๋๋ก ์ฌ๋ฌ ์ข
์ ์ ๋ผ์ฐํฐ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํ๋ค.
- ์ด์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ผ์ฐํฐ ์ปดํฌ๋ํธ๋ BrowserRouter์ HashRouter์ด๋ค.
1) ์ข
๋ฅ
2) ์ค์น
- npm: npm install react-router-dom
- yarn:yarn add react-router-dom
3) ์ฌ์ฉ ์์
ex) App.js
๐ Routes, Route ์ปดํฌ๋ํธ
: ๊ฒฝ๋ก ๋งค์นญํด์ฃผ๋ ์ญํ
-
,๋ App()ํจ์์ ์ปดํฌ๋ํธ ์์ ์ง์ด๋ฃ๋๋ค.
-
์ปดํฌ๋ํธ๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๊ณ , ๊ทธ์ค ๊ฒฝ๋ก๊ฐ ์ผ์นํ๋ ๋จ ํ๋์ ๋ผ์ฐํฐ๋ง ๋ ๋๋ง ์ํค๋ ์ญํ
-
๋ฅผ ์ฌ์ฉ ์ํ๋ฉด ๋งค์นญ๋๋ ๋ชจ๋ ์์๋ฅผ ๋ ๋๋งํจ
-
์ปดํฌ๋ํธ๋ path ์์ฑ์ผ๋ก ํด๋น path ์์ ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค์ง ์ ํจ
<Route path="/mypage" element={} />
๋จ, ์ปดํฌ๋ํธ๊ฐ ์ ํด์ฃผ๋ URL ๊ฒฝ๋ก์ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ์๋ํจ.
๐ Link ์ปดํฌ๋ํธ
:๊ฒฝ๋ก๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ ์ญํ
: ๊ฐ ์ปดํฌ๋ํธ ๋ฐ๊นฅ์ to ์์ฑ์ผ๋ก Route์ path ์์ฑ๊ณผ ์ผ์นํ๋ ์ฃผ์ ์์ฑ
์น ํ์ด์ง์์๋ ์๋ ๋งํฌ๋ฅผ ๋ณด์ฌ์ค ๋ aํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง aํ๊ทธ๋ ํด๋ฆญ์ ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค๊ธฐ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋๋ค.
- Link ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์๊น์๋ aํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง๋ง, History API๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ฃผ์์ ๊ฒฝ๋ก๋ง ๋ฐ๊พธ๋ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์๋ค.
- ๋ฌธ๋ฒ : ๋งํฌ๋ช
- import { Link } from 'react-router-dom';
ํ์ด์ง ์ ํ์ ํตํด ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ทธ๋๋ก ์ ์งํ์ฌ ํ์ด์ง์ ์ฃผ์๋ง ๋ณ๊ฒฝ (HTML5 History API๋ฅผ ์ด์ฉ)
๐UseNavigate ์ปดํฌ๋ํธ
- useNavigate๋ ํ์ด์ง๋ฅผ ์ด๋ํ ๋ ์ฌ์ฉ๋๋ค.
- Link๋ฅผ ์จ๋ ํ์ด์ง ์ด๋์ ์ํฌ ์ ์์ง๋ง ๋จ์ํ๊ฒ ์ด๋๋ง ์์ผ์ผ ํ๋ ๊ฒฝ์ฐ Link๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๊ณ useNavigate๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์ด๋ฒคํธ๊ฐ ์คํ๋์ ๋ ๋์ํ๋๋ก ํ๊ฑฐ๋ ์ถ๊ฐ์ ์ธ ๋ก์ง์ด ํ์ํ ๊ฒฝ์ฐ useNavigate๋ฅผ ์ฌ์ฉํ๋ค.
์ฌ์ฉ๋ฐฉ๋ฒ
๋ก๊ทธ์ธ์ด ๋์ด ์์ ๊ฒฝ์ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด navigate('/mypage')๊ฐ ์คํ๋์ด mypage๋ก ์ด๋ํจ
๐ฅ Link์ ์ฐจ์ด์ ?
useNavigate ๋ ํจ์ ํธ์ถ์ ํตํด ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํ์ด์ง๋ฅผ ์ด๋ํ ์ ์์