Vue Router는 vue의 공식 클라이언트 사이드 라우팅 솔루션
클라이언트 사이드 라우팅은 싱글 페이지 애플리케이션(SPA)에서 사용자가 보는 콘텐츠에 브라우저 URL을 연결하는 데 사용
사용자가 애플리케이션을 탐색함에 따라 URL이 적절하게 업데이트되지만, 페이지를 서버에서 다시 로드할 필요는 없음
App.vue
<template>
<h1>Hello App!</h1>
<p>
<strong>현재 라우트 경로:</strong> {{ $route.fullPath }}
</p>
<nav>
<RouterLink to="/">홈으로 가기</RouterLink>
<RouterLink to="/about">소개로 가기</RouterLink>
</nav>
<main>
<RouterView />
</main>
</template>
Vue Router 에서 제공하는 두 컴포넌트
RouterLink - <a> 태그 대신 사용
RouterView - 현재 라우트 컴포넌트를 렌더링할 위치를 Vue Router에 알려줌(현재 URL 경로에 해당하는 컴포넌트)
굳이 App.vue에 있을 필요는 없으며, 레이아웃에 맞게 어디에든 배치할 수 있지만, 어딘가에 포함되어 있어야함
그렇지 않으면 Vue Router가 아무것도 렌더링 하지 않음
라우터 인스턴스 생성
router.js
import { createMemoryHistory, createRouter } from 'vue-router'
import HomeView from './HomeView.vue'
import AboutView from './AboutView.vue'
const routes = [
{ path: '/', component: HomeView },
{ path: '/about', component: AboutView },
]
const router = createRouter({
history: createMemoryHistory(),
routes,
})
라우터 인스턴스는 createRouter() 함수를 호출하여 생성됨
routes 옵션은 라우트 자체를 정의, URL 경로를 컴포넌트에 매핑
component 옵션으로 지정된 컴포넌트는 이전의 App.vue 에서 <RouterView> 에 의해 렌더링될 컴포넌트
history 옵션은 라우특다 URL에 어떻게 매핑되는지, 그리고 그 반대의 경우에 대해 제어
예제에서는 createMemoryHistory를 사용하지만 실제 애플리케이션에서는 createWebHistory()나 createWebHashHistory()
를 사용
라우터 플러그인 등록
createApp(App)
.use(router)
.mount('#app')
//or
const app = createApp(App)
app.use(router)
app.mount('#app')
Options API
export default {
methods: {
goToAbout() {
this.$router.push('/about')
},
},
}
Composition API
<script setup>
import { computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'
const router = useRouter()
const route = useRoute()
const search = computed({
get() {
return route.query.search ?? ''
},
set(search) {
router.replace({ query: { search } })
}
})
</script>
예제
Vue SFC Playground
play.vuejs.org
가이드
https://router.vuejs.kr/guide/
Vue Router | Vue.js의 공식 라우터
Vue 3에 필요한 최신 공식 라우터
router.vuejs.kr
'JS F- > Vue' 카테고리의 다른 글
| 중첩된 라우트 (0) | 2024.05.31 |
|---|---|
| 이름이 있는 라우트 (0) | 2024.05.31 |
| Vue Router - 동적 라우트 매칭과 파라미터 (0) | 2024.05.31 |
| 컴포넌트 기초 (0) | 2024.05.29 |
| 템플릿 참조 (0) | 2024.05.29 |
| 감시자 (0) | 2024.05.29 |