4. Navigation
1. Web APIs
History
History ์ธํฐํ์ด์ค๋ ๋ธ๋ผ์ฐ์ ์ ์ธ์ ๊ธฐ๋ก, ์ฆ ํ์ฌ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์จ ํญ ๋๋ ํ๋ ์์ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ ์กฐ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
History.pushState
HTML5๋ถํฐ ์๋ก ๋ฑ์ฅํ ๋ฉ์๋ ๋ธ๋ผ์ฐ์ ์ ์ธ์ ๊ธฐ๋ก ์คํ์ ์ํ๋ฅผ ์ถ๊ฐ ๋งํฌ๋ฅผ ๊ฐ๋ก์ฑ
์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ ์ ๋ชฉ(์ ๊ณตํ ๊ฒฝ์ฐ URL๋)์ผ๋ก ์ธ์ ๊ธฐ๋ก ์คํ์ ์ถ๊ฐ
๋ฐ์ดํฐ๋ DOM์ด ๋ถํฌ๋ช (opaque)ํ๊ฒ ์ทจ๊ธํ๋ฏ๋ก, ์ง๋ ฌํ ๊ฐ๋ฅํ ๋ชจ๋ JavaScript ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์
Safari๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ title ๋งค๊ฐ๋ณ์๋ฅผ ๋ฌด์
๐ ์ด์ ์๋ ์๋ก ๋ก๋ฉ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ฃผ์์ #
, #!
๋ฑ์ ๋ถ์ฌ์ ์ฌ์ฉํ์
์ฌ์ฉ ๋ฐฉ๋ฒ
state
์๋ฌด ๊ฐ์ฒด๋ ๋ฃ์ ์ ์์
์๋ก์ด ์ธ์ ๊ธฐ๋ก ํญ๋ชฉ์ ์ฐ๊ฒฐํ ์ํ ๊ฐ์ฒด
url (Optional)
์๋ก์ด ์ธ์ ๊ธฐ๋ก ํญ๋ชฉ์ URL
์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ๋ฌธ์์ ํ์ฌ URL์ ์ฌ์ฉ
<a>
ํ๊ทธ์ onClick์ผ๋ก ๋๊ฒจ์ฃผ๊ธฐ
โ๏ธ ์กฐ๊ฐ๊ธ
ํ์
<Link>
ํ๊ทธ๋ฅผ ๊ทธ๋ฅ ์ฌ์ฉํ๊ณค ํ์๋๋ฐ, History.pushState ๋ผ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ง์ ์ฒ๋ฆฌํด์ค ์ ์๋ค๋ ๊ฒ์ ์๋ก ์๊ฒ ๋์๋ค. React๊ฐ Class ์ปดํฌ๋ํธ์์ ํจ์ ์ปดํฌ๋ํธ๋ก ํจ๋ฌ๋ค์์ด ์ ํ๋ ๊ฒ ์ฒ๋ผ, ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ํ์async/await
์ ๋ฑ์ฅ์ฒ๋ผ ๊ธฐ์ ์ ํญ์ ํธ๋ฆฌํ๊ณ ์ฌ์ด ๋ฐฉํฅ์ผ๋ก ์งํํ๋ค๋๊ฑธ ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ์ ๋ถํธํจ์ ๋ชจ๋ฅด๊ณ ์๋ ๋ด๊ฐ ๋คํ์ด๋ผ๋ ์๊ฐ๋ ๋ค๊ณ . ํํธ์ผ๋ก ์ง๊ธ์ ํธ๋ฆฌํจ์๋ ์๋ช ์ด ์๋ค๊ณ ์๊ฐํ๋ฉด ์์ผ๋ก ๋ฐ๋ผ์ก์์ผ ํ ์ ๊ธฐ์ ์ ์๋ํด์ง๊ธฐ๋ ํ๋ค.
2. React Router
๐ ์ค์ต ๋งํฌ : Navigate ์ ์ฉ, ํ ์คํธ ์ฝ๋ ์์ฑ ๋ฐ whatwg-fetch ์ค์น ๐ ์ค์ต ๋งํฌ : useNavigate ์ด์ฉํด ๋ฆฌ๋ค์ด๋ ์ ์ฒ๋ฆฌํ๊ธฐ
Link
์ฌ์ฉ์๊ฐ ํด๋ฆญํ๊ฑฐ๋ ํญํ์ฌ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ ์ ์๊ฒ ํด์ฃผ๋ ์์
<Link>
๋ ์ฐ๊ฒฐ๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํค๋ href๊ฐ ์๋ ์ ๊ทผ ๊ฐ๋ฅํ <a>
์์๋ฅผ ๋ ๋๋ง
History.pushState๋ฅผ ์ง์ ํ์ง ์์๋ React Router์์ ๋ค ํด์ฃผ๋ ๊ธฐ๋ฅ
ํ์ด์ง ์ ํ ์ ์ฃผ์ ๋ณ๊ฒฝ
๋ด์ฉ ๋ณ๊ฒฝ
์ฌ์ฉ ๋ฐฉ๋ฒ
NavLink
๋ค๋น๊ฒ์ด์
์ฉ ๋งํฌ
ํ์ฑ, ๋ณด๋ฅ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ <Link>
ํ๊ทธ
ํ์ ๋ฉ๋ด, ํ์ฌ ์ ํ๋ ํญ๋ชฉ์ ํ์ํ ๋ ์ ์ฉ
<NavLink>
์ฒ๋ฆฌ๋ ๋ฒํผ ํด๋ฆญ ์ ์์ ๋ณํ
<NavLink>
์ฒ๋ฆฌ๋ ๋ฒํผ ํด๋ฆญ ์ ์์ ๋ณํ๊ธฐ๋ณธ์ ์ผ๋ก active ํด๋์ค๋ <NavLink>
๊ฐ ํ์ฑ ์ํ์ผ ๋ ์ถ๊ฐ๋จ
CSS๋ก ์คํ์ผ ์ง์ ๊ฐ๋ฅ
์ฌ์ฉ ๋ฐฉ๋ฒ
Navigate
๋ฌด์กฐ๊ฑด ๋ฆฌ๋ค์ด๋ ์
๋ฐ์
<Navigate>
๋ ๋ ๋๋ง๋ ๋ ํ์ฌ ์์น๋ฅผ ๋ณ๊ฒฝ
์ด๋ค ์์
์ ์ํํ๊ณ ๋ฆฌ๋ค์ด๋ ์
์ ๋ฐ์์ํฌ ๋ (Ex. Logout ์ฒ๋ฆฌ)
์ฌ์ฉ ๋ฐฉ๋ฒ
ํ
์คํธ
๐ก ํ
์คํธ์์ ReferenceError: Request is not defined
์๋ฌ๊ฐ ๋๋ฉด whatwg-fetch๋ฅผ ์ํฌํธํด์ ํด๊ฒฐ
๐จ ์๋ฌ ๋ฉ์์ง
โถ๏ธ
RUNS
src/routes.test.tsx return new Request(url, init); ^ReferenceError: Request is not defined
ํด๊ฒฐ ๋ฐฉ๋ฒ
setupTests.ts
์ import 'whatwg-fetch'
useNavigate
Hook์ ์ด์ฉํด redirect์ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌ
replace
๋ค๋ก๊ฐ๊ธฐ ๋ฐฉ์ง ๋ก๊ทธ์ธ์ ํด์ผ ์ ๊ทผํ ์ ์๋ ํ์ด์ง์ ๊ฒฝ์ฐ, ๋ก๊ทธ์์์ ํด์ ์ ์ ํ ํฐ ๊ฐ์ด ์์ ๋ ์ฌ์ฉ
navigate์ url๋ก ๋์ด๊ฐ ํ์๋ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ํ๋๋ผ๋ ์ด์ ํ์ด์ง๋ก ๋์์ฌ ์ ์์
์ฌ์ฉ ๋ฐฉ๋ฒ
3. ๋์ ๋ผ์ฐํ
๋ผ์ฐํธ ๊ฒฝ๋ก์ ํน์ ๊ฐ์ ๋ฃ์ด ํด๋นํ๋ ํ์ด์ง๋ก ์ด๋ํ ์ ์๊ฒ ํ๋ ๊ฒ ์น ์ฌ์ดํธ์ ์์ธ ํ์ด์ง ๊ตฌํ์ ์ฌ์ฉ
useParams
React Router์์ ์ ๊ณตํ๋ ํจ์, hook
Path Parameter์ ๊ดํ ์ ๋ณด๋ฅผ ๋ด์
์ฌ์ฉ ๋ฐฉ๋ฒ
Route์ path ์์ '/category/:id' ํํ์ ๊ฒฝ๋ก ์ถ๊ฐ
Path Parameter
: ๊ฒฝ๋ก ๋์ ๋ค์ด๊ฐ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ id๊ฐ์ ์ ์ฅํ๋ ๋งค๊ฐ๋ณ์id
: ํด๋น Path Parameter์ ์ด๋ฆ, ์์๋ก ์ด๋ฆ์ ์ง์ ํ ์ ์์:
: Path Parameter๊ฐ ์ฌ ๊ฒ์์ ์๋ฏธ, ๋์ ๋ผ์ฐํ ์ ์ฌ์ฉํ๋ค๋ ๋ป
url์ ๋ด๊ธด id ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
Last updated