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 |
|---|---|---|
| 360 | 2016. 05. 31. | [ bootstrap ] bootstrap modal multi modal wheel and focus not work |
| 359 | 2016. 05. 03. | [ javascript ] 이벤트 전파 |
| 357 | 2016. 04. 16. | [ datatable ] jquery datatable and editor exemple 사용법 예 |
| 312 | 2015. 07. 02. | [ jquery ] 선택된 라디오 박스 값 이름으로 가져오기 |
| 305 | 2015. 06. 16. | [ dynatree ] dynatree 함수들 |
| 286 | 2015. 05. 30. | [ javascript ] 운영체제 비트 확인하기 |
| 275 | 2015. 05. 04. | [ jquery ] dynatree option 옵션들 |
| 269 | 2015. 04. 08. | [ javascript ] jquery 에서 ajax 로 배열 넘기기 |
| 268 | 2015. 04. 08. | [ javascript ] jquery map() 을 이용하여 여러 폼값을 배열로 만들기. |
| 267 | 2015. 04. 08. | [ javascript ] jquery 로 해당 객체들중에 대상 선택하여 인덱스값 가져오기 |