Introduction to v-show and v-if directives
The v-show and v-if directives in Vue.js are both used to conditionally render elements in the DOM, but they have different behavior and use cases.
V-show
- The v-show directive toggles the CSS display property of the element based on the truthiness of the expression provided.
- When the expression evaluates to true, the element is displayed (with display: block), and when it evaluates to false, the element is hidden (with display: none).
- The element remains in the DOM at all times, even when hidden, so it incurs a small performance overhead.
- v-show is useful when you want to toggle the visibility of an element frequently, such as in a tabbed interface or a dropdown menu.
<template> <div> <button @click="toggleVisibility">Toggle</button> <div v-show="isVisible">This div is toggled with v-show</div> </div> </template> <script> export default { data() { return { isVisible: true }; }, methods: { toggleVisibility() { this.isVisible = !this.isVisible; } } }; </script>
V-if
- The v-if directive removes or adds the element to/from the DOM based on the truthiness of the expression provided.
- When the expression evaluates to true, the element is added to the DOM; when it evaluates to false, the element is removed from the DOM.
- v-if has higher initial rendering overhead compared to v-show because it must create or destroy the element in the DOM each time the condition changes.
- v-if is useful when you want to conditionally render an element that may not be needed initially or may not be needed frequently.
<template> <div> <button @click="toggleVisibility">Toggle</button> <div v-if="isVisible">This div is toggled with v-if</div> </div> </template> <script> export default { data() { return { isVisible: true }; }, methods: { toggleVisibility() { this.isVisible = !this.isVisible; } } }; </script>
Key differences between v-show and v-if
- Performance: V-show has better performance when toggling visibility frequently because it simply changes the CSS display property, while v-if has a higher initial rendering cost because it creates or destroys the element in the DOM.
- Initial Rendering: V-show elements are always rendered initially in the DOM, while v-if elements are only rendered when the condition is true.
- DOM Manipulation: V-show toggles the visibility of an existing element, while v-if adds or removes the element from the DOM based on the condition.
Summary
V-show toggles the visibility of an element by toggling its CSS display property, while v-if conditionally renders or removes the element from the DOM. Use v-show for elements that need to be toggled frequently but always remain in the DOM, and use v-if for elements that may not always be needed or don't need to be in the DOM until certain conditions are met.

Join the conversation! Your thoughts help the community grow.