Vue 문법 정리 4 / Vue Router URL 컴포넌트 매핑 방법
Vue 라우터란?
URL 경로에 따라 화면에 렌더링할 컴포넌트를 매핑할 수 있는 라우팅 라이브러리입니다.
Vue 프로젝트 라우터 적용 방법
Vue 라우터 라이브러리 설치
npm install vue-router
프로젝트 경로에서 위 명령어를 통해 Vue Router를 설치할 수 있습니다.
라우트 설정 (URL, 컴포넌트 매핑)
import { createRouter, createWebHistory } from 'vue-router';
import View컴포넌트명1 from '@/views/View컴포넌트명1.vue';
import View컴포넌트명2 from '@/views/View컴포넌트명2.vue';
import View컴포넌트명3 from '@/views/View컴포넌트명3.vue';
import View컴포넌트명4 from '@/views/View컴포넌트명4.vue';
const routes = [
{
path: '/',
name: '페이지명1' // 필수값 X
component: View컴포넌트명1
},
{
path: '/URL경로',
component: View컴포넌트명2
},
{
path: '/URL경로/하위경로',
component: View컴포넌트명3
},
{
path: '/URL경로/:id', // 동적 세그먼트를 통한 동적 라우팅 (여러 URL을 하나의 컴포넌트에 매핑)
component: View컴포넌트명4
},
]
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), // 기본값 : '/'
routes, // 키와 값이 같으므로 단축 표현 사용
});
export default router;
src/router 폴더에 index.js 파일 생성 후, 위와 같이 라우터 객체를 생성하고 내보내면 됩니다.
createWebHistory 함수 파라미터 경로를 기준으로 라우터가 URL 히스토리를 관리합니다.
Vue 라우팅 기능 사용 설정
import router from '@/router';
createApp(App).use(router).mount('#app');
main.js 파일에 router import 후 라우터 객체 인스턴스를 Vue 앱에 등록하면 적용됩니다.
이제 ‘http://localhost:포트/URL경로’로 접근하면 매핑된 컴포넌트가 렌더링 됩니다.
Vue 라우터 사용법
RouterView 렌더링 방법
<template>
<main>
<div class="container">
<RouterView></RouterView>
</div>
</main>
</template>
특정 컴포넌트 안에 RouterView 내장 컴포넌트를 위치시키면,
현재 URL 경로에 매핑된 컴포넌트가 RouterView 내부에 렌더링됩니다.
HTML에서 페이지 이동 방법
<template>
<nav>
<RouterLink to="/">Home</RouterLink>
<RouterLink to="/URL경로">페이지명</RouterLink>
</nav>
</template>
일반 a 태그 대신 RouterLink 커스텀 컴포넌트를 사용하면,
전체 페이지 리로딩 없이 URL에 매핑된 페이지 컴포넌트를 렌더링할 수 있습니다.
RouterLink 활성화 시 클래스 지정
<template>
<nav>
<RouterLink active-class="active클래스명" to="/">Home</RouterLink>
<RouterLink active-class="active클래스명" to="/URL경로">페이지명</RouterLink>
</nav>
</template>
RouterLink는 기본적으로 a 태그로 렌더링됩니다.
위와 같이 RouterLink에 active-class를 지정하면, a태그가 클릭되어 활성화 시 클래스를 부여합니다.
Vue 3 이상은 active-class가 지원되지 않고, 활성화된 링크에 자동으로 붙는 router-link-active, router-link-exact-active 클래스에 스타일을 지정합니다.
Javascript에서 페이지 이동 방법
<template>
<button @click="$router.push('/경로')">버튼명</button>
또는
<button @click="goOrderPage">버튼명</button>
</template>
<script setup>
import { useRouter } from 'vue-router';
const router = useRouter();
const goOrderPage = () => {
router.push('/경로');
}
</script>
Options API의 this.$router는 Composition API의 useRouter() 훅과 같은 기능을 합니다.
router.push()로 전체 페이지 리로딩 없이 페이지를 이동할 수 있습니다.
라우트 정보 접근 방법
<template>
<p></p>
</template>
<script setup>
import { useRoute } from 'vue-router';
const route = useRoute();
console.log(route.path); // 현재 URL 경로 객체
console.log(route.name); // 라우트에 설정된 페이지 이름 (없으면 undefined)
console.log(route.params); // URL로 받은 동적 세그먼트 파라미터 객체
console.log(route.query); // URL로 받은 쿼리스트링 파라미터 객체
console.log(route.query.파라미터키); // 특정 쿼리 파라미터 값 추출
console.log(route.hash); // URL로 받은 해시태그 파라미터 객체
</script>
Options API의 this.$route는 Composition API의 useRoute() 훅과 같은 기능을 합니다.
현재 활성화된 URL 경로, URL 파라미터 등 라우트 정보를 확인할 수 있습니다.