Vue renders v-if, v-show, and v-for efficiently only when you choose the right directive for the toggle pattern and preserve keyed identity; the pitfalls show up during frequent toggles and list reorders.
How does Vue handle conditional rendering and list rendering efficiently?
Overview
Vue's rendering directives are efficient for different reasons, so the production pitfall is treating them as interchangeable. v-if creates and destroys branches, v-show keeps DOM mounted and toggles visibility, and v-for depends on stable keys so Vue can patch identity correctly during list updates.
Conditional Rendering
Conditional rendering in Vue is handled primarily with v-if, v-else-if, v-else, and v-show.
<template>
<div>
<p v-if="isLoggedIn">Welcome back, {{ username }}!</p>
<p v-else>Please log in to continue.</p>
<button v-show="!isLoggedIn">Login</button>
</div>
</template>
<script>
export default {
data() {
return {
isLoggedIn: false,
username: 'Mina'
};
}
};
</script>
Here’s how it works:
v-ifadds or removes elements from the DOM completely based on the condition. It’s useful when the condition changes infrequently.v-showtoggles the element’s CSSdisplayproperty without adding or removing it from the DOM, which is more efficient for frequent toggling.
List Rendering
Vue’s v-for directive is used to render lists of items efficiently. Each list item is tracked using a key, allowing Vue to reuse and reorder DOM elements instead of re-creating them from scratch.
<template>
<ul>
<li v-for="user in users" :key="user.id">
{{ user.name }}
</li>
</ul>
</template>
<script>
export default {
data() {
return {
users: [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
]
};
}
};
</script>
The :key attribute helps Vue track each item’s identity when updating the DOM. This makes updates more efficient, as Vue can determine what has changed, added, or removed using its virtual DOM diffing algorithm.
Directive | Purpose | Efficiency Note |
|---|---|---|
v-if / v-else-if / v-else | Conditionally add or remove elements from the DOM | Slower if toggled frequently (creates/destroys elements) |
v-show | Toggle element visibility using CSS display | Faster for frequent toggling |
v-for | Render a list of elements based on an array or object | Highly optimized with key tracking and virtual DOM diffing |
Why It’s Efficient
Vue uses a virtual DOM to compare the current and previous states of the UI. When changes occur, Vue only updates the parts that differ, instead of re-rendering the entire view. This ensures performance even in large lists or when toggling content rapidly.
Think of v-if as removing or inserting items from a shelf and v-show as simply covering or uncovering them — both are efficient, but suited for different situations.
Summary
v-ifremoves or inserts elements into the DOM.v-showtoggles visibility via CSS.v-forefficiently renders dynamic lists using keys.- Vue’s virtual DOM minimizes unnecessary DOM updates for smooth performance.
Use the relevant interview-question hub first, then move into a concrete study plan before targeted company sets.