DeployU
Interviews / Frontend Engineering / What is the difference between `v-if` and `v-show` in Vue?

What is the difference between `v-if` and `v-show` in Vue?

conceptual Directives Interactive Quiz Code Examples

The Scenario

You are a frontend engineer at an e-commerce company. You are building a new feature that needs to conditionally show or hide a component based on the user’s actions.

You are not sure whether to use the v-if directive or the v-show directive.

The Challenge

Explain the difference between the v-if and v-show directives in Vue. What are the pros and cons of each approach, and which one would you choose for this use case?

Wrong Approach

A junior engineer might think that they are interchangeable. They might not be aware of the performance implications of choosing one over the other.

Right Approach

A senior engineer would be able to provide a detailed explanation of the differences between `v-if` and `v-show`. They would also be able to explain the trade-offs between each approach and would have a clear recommendation for which one to use in a given situation.

Step 1: Understand the Key Differences

Featurev-ifv-show
Rendering”Real” conditional rendering, because it ensures that event listeners and child components inside the conditional block are properly destroyed and re-created during toggles.The element is always rendered, and its display CSS property is toggled.
PerformanceHigher toggle costs, because the element is created and destroyed each time.Higher initial render cost, because the element is always rendered.
Use CasesWhen you need to conditionally render a component that is expensive to render, or when you need to make sure that the component is properly destroyed and re-created.When you need to toggle the visibility of a component frequently.

Step 2: Choose the Right Tool for the Job

For our use case, it depends on how often the component will be toggled.

  • If the component will be toggled frequently, we should use v-show.
  • If the component will not be toggled frequently, we should use v-if.

Step 3: Code Examples

Here are some code examples that show the difference between the two approaches:

v-if:

<div v-if="myCondition">
  This will only be rendered if myCondition is true.
</div>

v-show:

<div v-show="myCondition">
  This will always be rendered, but it will only be visible if myCondition is true.
</div>

Practice Question

You are building a modal dialog that is only shown when the user clicks a button. Which of the following would be the most appropriate?