<Transition>
컴포넌트는 빌트인 컴포넌트이므로 등록하지 않고도 템플릿 내에서 사용 가능하다.
v-if
를 통한 조건부 렌더링v-show
를 통한 조건부 표시<component>
를 통해 전환되는 동적 컴포넌트<template>
<button @click="show = !show">토글</button>
<Transition>
<p v-if="show">안녕</p>
</Transition>
</template>
<script>
export default {
data() {
return {
show: true
}
}
}
</script>
<style>
.v-enter-active,
.v-leave-active {
transition: opacity 0.5s ease;
}
.v-enter-from,
.v-leave-to {
opacity: 0;
}
</style>
name
prop으로 지정된 경우, 트랜지션 클래스에는 v 대신 이름이 접두사로 붙는다.v-enter-active
-> fade-enter-active
<template>
<Transition name="fade">
...
</Transition>
</template>
<script>
// ...
</script>
<style>
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s ease;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
</style>
<Transition>
컴포넌트의 이벤트를 수신하여 프로세스에 연결할 수 있다.onBeforeEnter
: 엘리먼트가 DOM에 삽입되기 전에 호출onEnter
: 엘리먼트가 DOM에 삽입되고 1 프레임 후 호출onAfterEnter
, onEnterCancelled
: 진입 트랜지션이 완료되면 호출onBeforeLeave
: onLeave
훅 전에 호출onLeave
: 진출 트랜지션이 시작될 때 호출, 진출 애니메이션을 시작하는데 사용된다.onAfterLeave
: 진출 트랜지션이 완료되고, 엘리먼트가 DOM에서 제거된 후 호출onLeaveCancelled
: v-show
트랜지션에서만 사용 가능하다.<template>
<Transition
@before-enter="onBeforeEnter"
@enter="onEnter"
@after-enter="onAfterEnter"
@enter-cancelled="onEnterCancelled"
@before-leave="onBeforeLeave"
@leave="onLeave"
@after-leave="onAfterLeave"
@leave-cancelled="onLeaveCancelled"
>
<!-- ... -->
</Transition>
</template>
<script>
export default {
methods: {
onBeforeEnter(el) {},
onEnter(el, done) {
done()
},
onAfterEnter(el) {},
onEnterCancelled(el) {},
onBeforeLeave(el) {},
onLeave(el, done) {
done()
},
onAfterLeave(el) {},
onLeaveCancelled(el) {}
}
}
</script>
💡 JavaScript 전용 트랜지션을 사용할 때 :css="false" prop을 추가하는 것이 좋다.
(Vue가 CSS 트랜지션을 자동으로 감지하는 것을 건너뛰도록 지시, CSS 규칙이 실수로 트랜지션을 방해하는 것 방지)
<template>
<Transition
...
:css="false"
>
...
</Transition>
</template>