4. Navigation

1. Web APIs

History

History

History ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์„ธ์…˜ ๊ธฐ๋ก, ์ฆ‰ ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ํƒญ ๋˜๋Š” ํ”„๋ ˆ์ž„์˜ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต

History.pushState

History.pushState()

HTML5๋ถ€ํ„ฐ ์ƒˆ๋กœ ๋“ฑ์žฅํ•œ ๋ฉ”์†Œ๋“œ ๋ธŒ๋ผ์šฐ์ €์˜ ์„ธ์…˜ ๊ธฐ๋ก ์Šคํƒ์— ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ ๋งํฌ๋ฅผ ๊ฐ€๋กœ์ฑ”

  • ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•œ ์ œ๋ชฉ(์ œ๊ณตํ•œ ๊ฒฝ์šฐ URL๋„)์œผ๋กœ ์„ธ์…˜ ๊ธฐ๋ก ์Šคํƒ์— ์ถ”๊ฐ€

  • ๋ฐ์ดํ„ฐ๋Š” DOM์ด ๋ถˆํˆฌ๋ช…(opaque)ํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•˜๋ฏ€๋กœ, ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  JavaScript ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • Safari๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๋Š” title ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฌด์‹œ

๐Ÿ”Ž ์ด์ „์—๋Š” ์ƒˆ๋กœ ๋กœ๋”ฉ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ฃผ์†Œ์— #, #! ๋“ฑ์„ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ–ˆ์Œ

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

history.pushState(state, title[, url]);
  • 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> ํƒœ๊ทธ ํƒ์ƒ‰ ๋ฉ”๋‰ด, ํ˜„์žฌ ์„ ํƒ๋œ ํ•ญ๋ชฉ์„ ํ‘œ์‹œํ•  ๋•Œ ์œ ์šฉ

๊ธฐ๋ณธ์ ์œผ๋กœ 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

useNavigate

Hook์„ ์ด์šฉํ•ด redirect์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

replace

๋’ค๋กœ๊ฐ€๊ธฐ ๋ฐฉ์ง€ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€์˜ ๊ฒฝ์šฐ, ๋กœ๊ทธ์•„์›ƒ์„ ํ•ด์„œ ์œ ์ € ํ† ํฐ ๊ฐ’์ด ์—†์„ ๋•Œ ์‚ฌ์šฉ

navigate์˜ url๋กœ ๋„˜์–ด๊ฐ„ ํ›„์—๋Š” ๋’ค๋กœ๊ฐ€๊ธฐ๋ฅผ ํ•˜๋”๋ผ๋„ ์ด์ „ ํŽ˜์ด์ง€๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์—†์Œ

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

3. ๋™์  ๋ผ์šฐํŒ…

๋ผ์šฐํŠธ ๊ฒฝ๋กœ์— ํŠน์ • ๊ฐ’์„ ๋„ฃ์–ด ํ•ด๋‹นํ•˜๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ ์›น ์‚ฌ์ดํŠธ์˜ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ตฌํ˜„์— ์‚ฌ์šฉ

useParams

useParams

  • React Router์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜, hook

  • Path Parameter์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์Œ

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

Route์˜ path ์•ˆ์— '/category/:id' ํ˜•ํƒœ์˜ ๊ฒฝ๋กœ ์ถ”๊ฐ€

  • Path Parameter : ๊ฒฝ๋กœ ๋์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ id๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜

  • id : ํ•ด๋‹น Path Parameter์˜ ์ด๋ฆ„, ์ž„์˜๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

  • : : Path Parameter๊ฐ€ ์˜ฌ ๊ฒƒ์ž„์„ ์˜๋ฏธ, ๋™์  ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป

url์— ๋‹ด๊ธด id ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

Last updated