Bird
Raised Fist0
Vueframework~8 mins

Transition component basics in Vue - Performance & Optimization

Choose your learning style10 modes available
Performance: Transition component basics
MEDIUM IMPACT
This affects the smoothness and speed of visual changes on the page, impacting user interaction responsiveness and visual stability.
Animating element appearance and disappearance
Vue
<template>
  <Transition name="fade">
    <div v-if="show">Content</div>
  </Transition>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s ease;
}
.fade-enter-from, .fade-leave-to {
  opacity: 0;
}
.fade-enter-to, .fade-leave-from {
  opacity: 1;
}
</style>
Vue's Transition component batches DOM updates and applies CSS classes at the right time, reducing layout thrashing.
📈 Performance GainSingle reflow per transition cycle, smoother animations, better input responsiveness.
Animating element appearance and disappearance
Vue
<template>
  <div v-if="show" class="fade">Content</div>
</template>

<style>
.fade {
  transition: opacity 0.5s ease;
  opacity: 1;
}
.fade-leave-active {
  opacity: 0;
}
</style>
Directly toggling classes without Vue's Transition component causes abrupt DOM changes and multiple reflows.
📉 Performance CostTriggers multiple reflows and repaints per toggle, causing jank during interaction.
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Direct class toggle without TransitionMultiple add/remove nodesMultiple reflows per toggleHigh paint cost due to layout thrashing[X] Bad
Vue Transition component with opacity animationMinimal DOM changesSingle reflow per animationLow paint cost with GPU compositing[OK] Good
Rendering Pipeline
The Transition component manages CSS class changes to trigger animations, affecting style calculation and paint stages without forcing layout recalculations.
→Style Calculation
→Paint
→Composite
⚠️ BottleneckPaint stage due to opacity changes triggering repaints
Core Web Vital Affected
INP
This affects the smoothness and speed of visual changes on the page, impacting user interaction responsiveness and visual stability.
Optimization Tips
1Use Vue's Transition component to batch DOM updates during animations.
2Animate opacity or transform properties to minimize layout recalculations.
3Avoid toggling classes directly on elements without Transition for smoother performance.
Performance Quiz - 3 Questions
Test your performance knowledge
What is the main performance benefit of using Vue's Transition component for animations?
AIt disables CSS transitions to speed up rendering.
BIt increases the number of DOM nodes for smoother animations.
CIt batches DOM updates to reduce layout thrashing and repaints.
DIt forces synchronous JavaScript execution during animations.
DevTools: Performance
How to check: Record a performance profile while toggling the transition. Look for layout thrashing and paint events in the flame chart.
What to look for: Smooth frame times with minimal layout recalculations and paint events indicate good transition performance.

Practice

(1/5)
1. What is the main purpose of the <Transition> component in Vue?
easy
A. To handle form validation
B. To fetch data from an API
C. To animate elements when they appear or disappear
D. To create reusable components

Solution

  1. Step 1: Understand the role of the Transition component

    The Transition component is designed to wrap elements and animate their entrance and exit in the DOM.
  2. Step 2: Compare with other options

    Fetching data, form validation, and reusable components are unrelated to animation, which is the Transition's focus.
  3. Final Answer:

    To animate elements when they appear or disappear -> Option C
  4. Quick Check:

    Transition = Animate appearance/disappearance [OK]
Hint: Transition = animation for showing/hiding elements [OK]
Common Mistakes:
  • Thinking Transition fetches data
  • Confusing Transition with form handling
  • Assuming Transition creates components
2. Which of the following is the correct way to use the <Transition> component with a CSS animation named "fade"?
easy
A. <Transition effect="fade"><div v-if="show">Hello</div></Transition>
B. <Transition animation="fade"><div v-if="show">Hello</div></Transition>
C. <Transition class="fade"><div v-if="show">Hello</div></Transition>
D. <Transition name="fade"><div v-if="show">Hello</div></Transition>

Solution

  1. Step 1: Recall the correct attribute for CSS class prefix

    The Transition component uses the name attribute to set the CSS class prefix for animations.
  2. Step 2: Check the options for correct attribute usage

    Only <Transition name="fade"><div v-if="show">Hello</div></Transition> uses name="fade", which is correct. Others use invalid attributes like animation, class, or effect.
  3. Final Answer:

    <Transition name="fade"><div v-if="show">Hello</div></Transition> -> Option D
  4. Quick Check:

    Use name="fade" for CSS animation prefix [OK]
Hint: Use name="animationName" for Transition CSS classes [OK]
Common Mistakes:
  • Using animation or effect instead of name
  • Adding class attribute to Transition
  • Forgetting to use v-if or v-show inside Transition
3. Given the code below, what will happen when show changes from true to false?
<template>
  <Transition name="slide">
    <div v-if="show">Slide Content</div>
  </Transition>
</template>

<script setup>
import { ref } from 'vue'
const show = ref(true)
</script>
medium
A. The div will disappear with a slide animation
B. The div will disappear instantly without animation
C. The div will remain visible
D. There will be a syntax error

Solution

  1. Step 1: Understand v-if with Transition

    The v-if controls the presence of the div. When show becomes false, the div is removed.
  2. Step 2: Role of Transition with name="slide"

    The Transition component applies CSS classes with prefix "slide" to animate the element's exit.
  3. Final Answer:

    The div will disappear with a slide animation -> Option A
  4. Quick Check:

    v-if false + Transition = animated exit [OK]
Hint: v-if false inside Transition triggers exit animation [OK]
Common Mistakes:
  • Thinking div disappears instantly without animation
  • Assuming div stays visible
  • Confusing v-if with v-show behavior
4. Identify the error in this Vue template using Transition:
<Transition name="fade">
  <div v-show="visible">Content</div>
</Transition>
What is the problem?
medium
A. v-show should be replaced with v-if for Transition to work
B. The name attribute should be class instead
C. Transition does not work with v-show for enter/leave animations
D. The div must have a key attribute

Solution

  1. Step 1: Understand difference between v-if and v-show with Transition

    Transition works best with v-if because it controls element presence, triggering enter/leave animations.
  2. Step 2: v-show only toggles visibility, so Transition cannot animate enter/leave properly

    Using v-show inside Transition does not trigger the full animation lifecycle.
  3. Final Answer:

    v-show should be replaced with v-if for Transition to work -> Option A
  4. Quick Check:

    Use v-if, not v-show, inside Transition for animations [OK]
Hint: Use v-if, not v-show, inside Transition for animations [OK]
Common Mistakes:
  • Thinking v-show triggers enter/leave animations
  • Confusing name attribute with class
  • Believing key attribute is mandatory here
5. You want to animate a list of items appearing and disappearing using <Transition>. Which approach correctly applies the Transition component to animate each item individually when the list changes? A) Wrap the entire list with one <Transition> component. B) Wrap each list item inside its own <Transition> component. C) Use <TransitionGroup> instead of <Transition> for lists. D) Use <Transition> only on the parent container without keys on items.
hard
A. Wrap the entire list with one <Transition> component.
B. Use <TransitionGroup> instead of <Transition> for lists.
C. Wrap each list item inside its own <Transition> component.
D. Use <Transition> only on the parent container without keys on items.

Solution

  1. Step 1: Recognize the need for list animations

    Animating multiple items entering and leaving requires special handling to animate each item individually.
  2. Step 2: Understand Vue's recommended component for list animations

    <TransitionGroup> is designed to animate lists, handling keys and individual item transitions automatically.
  3. Step 3: Evaluate other options

    Wrapping entire list with one Transition animates the whole list as one block, not individual items. Wrapping each item manually is cumbersome. Using Transition without keys breaks animations.
  4. Final Answer:

    Use <TransitionGroup> instead of <Transition> for lists. -> Option B
  5. Quick Check:

    Use TransitionGroup for list animations [OK]
Hint: Use TransitionGroup for animating lists, not Transition [OK]
Common Mistakes:
  • Using Transition for entire list instead of TransitionGroup
  • Not adding keys to list items
  • Wrapping each item manually with Transition
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard