Chapitre 3 sur 11

Tutoriel VueJS 3 – Rendu conditionnel

vérifié le 2 septembre 2026 · 3 min

Réponse rapide

v-if crée ou détruit l’élément, v-show le laisse dans le DOM et le masque avec display: none. Utilisez v-show pour ce qui s’ouvre et se ferme souvent, v-if pour tout le reste. Les chaînages passent par v-else-if et v-else.

À la fin de ce chapitre, vous saurez afficher un élément selon une condition, et choisir entre v-if et v-show en connaissance de cause.

Une boutique doit dire si le produit est disponible. Vue propose deux outils pour afficher ou masquer un élément selon une condition : v-if et v-show. Ils se ressemblent, mais ne font pas la même chose.

Préparer la condition

Ajoutez un stock à l’état du composant :

src/App.vue
<script setup>
import { ref } from 'vue'

const product = ref('T-Shirt')
const image = ref('/images/t-shirt-bleu.svg')
const inventory = ref(100)
</script>

v-if, v-else-if, v-else

v-if place un élément dans la page seulement si l’expression est vraie.

src/App.vue
<p v-if="inventory > 10">En stock</p>

Pour couvrir plusieurs cas, chaînez avec v-else-if et v-else :

src/App.vue
<div class="product-info">
  <h1>{{ product }}</h1>

  <p v-if="inventory > 10">En stock</p>
  <p v-else-if="inventory > 0">Bientôt en rupture</p>
  <p v-else>En rupture</p>
</div>

Un seul de ces trois paragraphes existe à la fois. Passez inventory à 5, puis à 0, et regardez le message changer.

Les trois directives doivent être voisines immédiates

v-else-if et v-else doivent suivre directement l’élément qui porte le v-if. Un commentaire ou un autre élément entre les deux et Vue avertit dans la console que le v-else n’a pas de v-if correspondant.

Conditionner plusieurs éléments à la fois

Pour appliquer une condition à un groupe sans ajouter de div inutile, portez le v-if sur <template>. Cette balise ne produit rien dans le HTML final.

html
<template v-if="inventory > 0">
  <h2>Disponible</h2>
  <p>Expédié sous 48 heures.</p>
</template>

v-show

v-show répond au même besoin, avec une mécanique différente :

src/App.vue
<p v-show="inventory > 0">Livraison sous 48 h</p>

L’élément est toujours présent dans le DOM. Quand la condition est fausse, Vue lui applique simplement display: none. Ouvrez l’inspecteur pour le vérifier :

html
<!-- inventory vaut 0, avec v-if : l’élément a disparu -->
<!--v-if-->

<!-- inventory vaut 0, avec v-show : l’élément est là, masqué -->
<p style="display: none;">Livraison sous 48 h</p>

Lequel choisir

La différence tient au coût de l’opération.

  • v-if crée et détruit l’élément, et avec lui ses composants enfants et leurs états. Coût élevé au basculement, coût nul quand la condition est fausse.
  • v-show ne fait que changer une propriété CSS. Coût élevé au premier rendu, puisque l’élément est toujours construit, coût quasi nul aux basculements suivants.

En pratique : v-show pour ce qui s’ouvre et se ferme souvent, comme un menu ou un panneau dépliant. v-if pour tout le reste, en particulier ce qui coûte cher à construire ou ne doit pas exister du tout dans certains cas.

v-show ne cache pas une information sensible

Un élément masqué par v-show reste dans le HTML : n’importe qui le lit dans l’inspecteur. Pour ce qui ne doit pas être visible, utilisez v-if, et surtout ne l’envoyez pas au navigateur.

v-if et v-for sur le même élément

Ne les combinez pas sur la même balise. La boucle v-for est le sujet du chapitre suivant. Depuis Vue 3, v-if a la priorité et s’évalue avant la boucle : la variable de boucle n’existe pas encore, ce qui provoque une erreur. Mettez le v-if sur un <template> intérieur, ou filtrez la liste dans une propriété calculée. Nous verrons les deux au chapitre 7.

En Options API

Identique. v-if et v-show sont des directives de gabarit, seule la déclaration de inventory change de forme.

ExerciceAffichez « Plus que quelques pièces » quand inventory est inférieur à 5, sans casser les autres messages. Puis vérifiez dans l’inspecteur qu’un élément masqué par v-show est bien présent dans le DOM.

Erreurs fréquentes

v-else séparé de son v-if Les deux directives doivent être sur des éléments voisins immédiats. Un commentaire ou une balise entre les deux et Vue signale un v-else sans v-if correspondant.
v-if et v-for sur la même balise Depuis Vue 3, v-if s’évalue avant v-for : la variable de boucle n’existe pas encore et Vue lève une erreur. Déplacez la boucle sur un <template> ou filtrez dans une propriété calculée.
Masquer une information sensible avec v-show L’élément reste lisible dans le code source de la page. Utilisez v-if, et mieux, ne l’envoyez pas au navigateur.
Newsletter

Les nouveaux tests, tutoriels et projets, par e-mail.

Tests reproductibles, code versionné, résultats datés. Jamais de spam.