Skip to content

ν”„λ‘œκ·Έλž˜λ° 방식 λ‚΄λΉ„κ²Œμ΄μ…˜ ​

μ„ μ–Έμ μœΌλ‘œ λ‚΄λΉ„κ²Œμ΄μ…˜μ„ ν•˜κΈ° μœ„ν•΄ <router-link>λ₯Ό μ‚¬μš©ν•˜μ—¬ 액컀 νƒœκ·Έλ₯Ό λ§Œλ“œλŠ” 것 외에도, λΌμš°ν„°μ˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μœΌλ‘œ λ‚΄λΉ„κ²Œμ΄μ…˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ°Έκ³ : μ•„λž˜ μ˜ˆμ œμ—μ„œλŠ” λΌμš°ν„° μΈμŠ€ν„΄μŠ€λ₯Ό router둜 μ§€μΉ­ν•©λ‹ˆλ‹€. μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œλŠ” $router 속성을 μ‚¬μš©ν•˜μ—¬ λΌμš°ν„°μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예: this.$router.push(...). Composition APIλ₯Ό μ‚¬μš©ν•˜λŠ” 경우, useRouter()λ₯Ό ν˜ΈμΆœν•˜μ—¬ λΌμš°ν„°μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€λ₯Έ URL둜 μ΄λ™ν•˜λ €λ©΄ router.pushλ₯Ό μ‚¬μš©ν•˜μ„Έμš”. 이 λ©”μ„œλ“œλŠ” νžˆμŠ€ν† λ¦¬ μŠ€νƒμ— μƒˆ ν•­λͺ©μ„ μΆ”κ°€ν•˜λ―€λ‘œ, μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ˜ λ’€λ‘œ κ°€κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ 이전 URL둜 μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€.

이 λ©”μ„œλ“œλŠ” <router-link>λ₯Ό 클릭할 λ•Œ λ‚΄λΆ€μ μœΌλ‘œ ν˜ΈμΆœλ˜λ―€λ‘œ, <router-link :to="...">λ₯Ό ν΄λ¦­ν•˜λŠ” 것은 router.push(...)λ₯Ό ν˜ΈμΆœν•˜λŠ” 것과 λ™μΌν•©λ‹ˆλ‹€.

μ„ μ–Έμ ν”„λ‘œκ·Έλž˜λ° 방식
<router-link :to="...">router.push(...)

μΈμˆ˜λŠ” λ¬Έμžμ—΄ κ²½λ‘œλ‚˜ μœ„μΉ˜ μ„€λͺ… 객체가 될 수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμ‹œ:

js
// λ¦¬ν„°λŸ΄ λ¬Έμžμ—΄ 경둜
router.push('/users/eduardo')

// κ²½λ‘œκ°€ μžˆλŠ” 객체
router.push({ path: '/users/eduardo' })

// λΌμš°ν„°κ°€ URL을 생성할 수 μžˆλ„λ‘ νŒŒλΌλ―Έν„°κ°€ μžˆλŠ” 이름 μžˆλŠ” 라우트
router.push({ name: 'user', params: { username: 'eduardo' } })

// 쿼리와 ν•¨κ»˜, κ²°κ³ΌλŠ” /register?plan=private
router.push({ path: '/register', query: { plan: 'private' } })

// ν•΄μ‹œμ™€ ν•¨κ»˜, κ²°κ³ΌλŠ” /about#team
router.push({ path: '/about', hash: '#team' })

μ°Έκ³ : pathκ°€ 제곡되면 paramsλŠ” λ¬΄μ‹œλ˜λ©°, μœ„ μ˜ˆμ‹œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ queryλŠ” κ·Έλ ‡μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ , 라우트의 name을 μ œκ³΅ν•˜κ±°λ‚˜ λͺ¨λ“  νŒŒλΌλ―Έν„°λ₯Ό ν¬ν•¨ν•œ 전체 pathλ₯Ό μˆ˜λ™μœΌλ‘œ μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€:

js
const username = 'eduardo'
// URL을 μˆ˜λ™μœΌλ‘œ λ§Œλ“€ 수 μžˆμ§€λ§Œ 인코딩을 직접 μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€
router.push(`/user/${username}`) // -> /user/eduardo
// 동일
router.push({ path: `/user/${username}` }) // -> /user/eduardo
// κ°€λŠ₯ν•˜λ‹€λ©΄ μžλ™ URL μΈμ½”λ”©μ˜ 이점을 μœ„ν•΄ `name`κ³Ό `params`λ₯Ό μ‚¬μš©ν•˜μ„Έμš”
router.push({ name: 'user', params: { username } }) // -> /user/eduardo
// `params`λŠ” `path`와 ν•¨κ»˜ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€
router.push({ path: '/user', params: { username } }) // -> /user

paramsλ₯Ό μ§€μ •ν•  λ•ŒλŠ” λ°˜λ“œμ‹œ string λ˜λŠ” number(λ˜λŠ” 반볡 κ°€λŠ₯ν•œ νŒŒλΌλ―Έν„°λ₯Ό μœ„ν•œ μ΄λ“€μ˜ λ°°μ—΄)λ₯Ό μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έ μ™Έμ˜ νƒ€μž…(객체, λΆˆλ¦¬μ–Έ λ“±)은 μžλ™μœΌλ‘œ λ¬Έμžμ—΄λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. 선택적 νŒŒλΌλ―Έν„°μ˜ 경우, 값을 빈 λ¬Έμžμ—΄("")μ΄λ‚˜ null둜 μ œκ³΅ν•˜μ—¬ μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

to prop은 router.push와 λ™μΌν•œ μ’…λ₯˜μ˜ 객체λ₯Ό ν—ˆμš©ν•˜λ―€λ‘œ, λ™μΌν•œ κ·œμΉ™μ΄ λͺ¨λ‘ μ μš©λ©λ‹ˆλ‹€.

router.push 및 λ‹€λ₯Έ λͺ¨λ“  λ‚΄λΉ„κ²Œμ΄μ…˜ λ©”μ„œλ“œλŠ” _Promise_λ₯Ό λ°˜ν™˜ν•˜λ―€λ‘œ, λ‚΄λΉ„κ²Œμ΄μ…˜μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬κ±°λ‚˜ 성곡 λ˜λŠ” μ‹€νŒ¨ μ—¬λΆ€λ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•΄μ„œλŠ” λ‚΄λΉ„κ²Œμ΄μ…˜ μ²˜λ¦¬μ—μ„œ 더 μžμ„Ένžˆ λ‹€λ£Ήλ‹ˆλ‹€.

ν˜„μž¬ μœ„μΉ˜ λŒ€μ²΄ν•˜κΈ° ​

이 λ©”μ„œλ“œλŠ” router.push와 λΉ„μŠ·ν•˜κ²Œ λ™μž‘ν•˜μ§€λ§Œ, μ΄λ¦„μ—μ„œ μ•Œ 수 μžˆλ“―μ΄ μƒˆλ‘œμš΄ νžˆμŠ€ν† λ¦¬ ν•­λͺ©μ„ μΆ”κ°€ν•˜μ§€ μ•Šκ³  ν˜„μž¬ ν•­λͺ©μ„ λŒ€μ²΄ν•©λ‹ˆλ‹€.

μ„ μ–Έμ ν”„λ‘œκ·Έλž˜λ° 방식
<router-link :to="..." replace>router.replace(...)

router.push에 μ „λ‹¬λ˜λŠ” to μΈμžμ— replace: true 속성을 직접 μΆ”κ°€ν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€:

js
router.push({ path: '/home', replace: true })
// μ•„λž˜μ™€ 동일
router.replace({ path: '/home' })

νžˆμŠ€ν† λ¦¬ 이동 ​

이 λ©”μ„œλ“œλŠ” ν•˜λ‚˜μ˜ μ •μˆ˜ν˜• νŒŒλΌλ―Έν„°λ₯Ό λ°›μ•„, νžˆμŠ€ν† λ¦¬ μŠ€νƒμ—μ„œ μ•žμœΌλ‘œ λ˜λŠ” λ’€λ‘œ λͺ‡ 단계 이동할지 μ§€μ •ν•©λ‹ˆλ‹€. μ΄λŠ” window.history.go(n)κ³Ό μœ μ‚¬ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ

js
// ν•œ 단계 μ•žμœΌλ‘œ 이동, router.forward()와 동일
router.go(1)

// ν•œ 단계 λ’€λ‘œ 이동, router.back()κ³Ό 동일
router.go(-1)

// 3단계 μ•žμœΌλ‘œ 이동
router.go(3)

// ν•΄λ‹Ή λ‹¨κ³„λ§ŒνΌ 기둝이 μ—†μœΌλ©΄ 쑰용히 μ‹€νŒ¨ν•¨
router.go(-100)
router.go(100)

νžˆμŠ€ν† λ¦¬ μ‘°μž‘ ​

router.push, router.replace, router.goκ°€ window.history.pushState, window.history.replaceState, window.history.go의 λŒ€μ‘ λ©”μ„œλ“œλΌλŠ” 점을 λˆˆμΉ˜μ±˜μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 이듀은 window.history APIλ₯Ό λͺ¨λ°©ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ λΈŒλΌμš°μ € νžˆμŠ€ν† λ¦¬ API에 이미 μ΅μˆ™ν•˜λ‹€λ©΄, Vue Routerλ₯Ό μ‚¬μš©ν•  λ•Œ νžˆμŠ€ν† λ¦¬ μ‘°μž‘μ΄ μ΅μˆ™ν•˜κ²Œ 느껴질 κ²ƒμž…λ‹ˆλ‹€.

λ˜ν•œ Vue Router의 λ‚΄λΉ„κ²Œμ΄μ…˜ λ©”μ„œλ“œ(push, replace, go)λŠ” λΌμš°ν„° μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ μ „λ‹¬λœ history μ˜΅μ…˜κ³Ό 상관없이 μΌκ΄€λ˜κ²Œ λ™μž‘ν•œλ‹€λŠ” 점도 μ–ΈκΈ‰ν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ‘λ₯Ό μœ„ν•œ λ¬Έμ„œ ν•œκΈ€ν™”