Contents
see List작성일 2022. 06. 11.
Vue 3 Composition API에서 라우터 사용하기
Vue 3의 Composition API(setup)에서는 this를 사용할 수 없어 라우터 접근 방식이 다릅니다. useRouter와 useRoute 컴포저블을 활용하는 방법을 알아봅니다.
1. 기본 설정
import { useRouter, useRoute } from "vue-router";
export default {
setup() {
const router = useRouter(); // 라우터 인스턴스
const route = useRoute(); // 현재 라우트 정보
return { router, route };
}
}
2. 프로그래밍 방식 네비게이션
import { useRouter } from "vue-router";
export default {
setup() {
const router = useRouter();
// 경로로 이동
const goToHome = () => {
router.push("/");
};
// 이름으로 이동
const goToUser = (id) => {
router.push({ name: "User", params: { id } });
};
// 쿼리 파라미터 포함
const search = (keyword) => {
router.push({
path: "/search",
query: { q: keyword }
});
};
// 히스토리 교체 (뒤로가기 불가)
const replaceRoute = () => {
router.replace("/new-page");
};
// 뒤로가기
const goBack = () => {
router.go(-1);
};
return { goToHome, goToUser, search, goBack };
}
}
3. 현재 라우트 정보 접근
import { useRoute } from "vue-router";
import { computed } from "vue";
export default {
setup() {
const route = useRoute();
// 현재 경로
console.log(route.path); // "/user/123"
// URL 파라미터
console.log(route.params.id); // "123"
// 쿼리 스트링
console.log(route.query.tab); // "profile"
// 라우트 이름
console.log(route.name); // "UserDetail"
// 반응형으로 감시
const userId = computed(() => route.params.id);
return { userId };
}
}
4. 네비게이션 가드
import { onBeforeRouteLeave, onBeforeRouteUpdate } from "vue-router";
export default {
setup() {
// 페이지 떠나기 전
onBeforeRouteLeave((to, from) => {
const answer = window.confirm("저장하지 않고 나가시겠습니까?");
if (!answer) return false;
});
// 같은 컴포넌트 내 라우트 변경 시
onBeforeRouteUpdate((to, from) => {
console.log("라우트 업데이트:", to.params.id);
});
}
}
5. script setup 문법
<script setup>
import { useRouter, useRoute } from "vue-router";
const router = useRouter();
const route = useRoute();
const navigate = () => {
router.push("/dashboard");
};
</script>
Options API vs Composition API 비교
| 기능 | Options API | Composition API |
|---|---|---|
| 라우터 | this.$router | useRouter() |
| 라우트 | this.$route | useRoute() |
| 이동 | this.$router.push() | router.push() |
주의사항
- useRouter/useRoute는 반드시 setup() 내부에서 호출
- route 객체는 반응형이므로 watch 가능
- params 변경 감지 시 computed나 watch 활용
javascript
| No | 작성일 | Title |
|---|---|---|
| 2213 | 2026. 02. 11. | React Server Components 심화 패턴과 활용 |
| 2212 | 2026. 02. 11. | Next.js 15 App Router 완벽 가이드 |
| 2171 | 2026. 02. 11. | Astro vs Remix vs SvelteKit: 풀스택 프레임워크 비교 |
| 2170 | 2026. 02. 11. | 프론트엔드 테스트 전략: Vitest + Testing Library + Playwright |
| 2169 | 2026. 02. 11. | React 19 신기능: use(), Actions, 서버 컴포넌트 개선 |
| 2168 | 2026. 02. 11. | Web API 최신 트렌드: View Transitions, Popover, Container Queries |
| 2167 | 2026. 02. 11. | Vite 6.0: 차세대 프론트엔드 빌드 도구 |
| 2166 | 2026. 02. 11. | Tailwind CSS 4.0과 모던 CSS 프레임워크 동향 |
| 2165 | 2026. 02. 11. | Zustand vs Jotai vs Recoil: React 상태 관리 비교 2025 |
| 2164 | 2026. 02. 11. | TypeScript 5.x 신기능과 타입 시스템 고급 활용 |