Capítulo 3 de 11

Tutorial VueJS 3 – Renderizado condicional

verificado el 2 septiembre 2026 · 3 min

Respuesta rápida

v-if crea o destruye el elemento, v-show lo deja en el DOM y lo oculta con display: none. Usa v-show para lo que se abre y se cierra a menudo, y v-if para todo lo demás. Los encadenamientos pasan por v-else-if y v-else.

Al final de este capítulo, sabrás mostrar un elemento según una condición y elegir entre v-if y v-show con criterio.

Una tienda tiene que decir si el producto está disponible. Vue ofrece dos herramientas para mostrar u ocultar un elemento según una condición: v-if y v-show. Se parecen, pero no hacen lo mismo.

Preparar la condición

Añade un stock al estado del componente:

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 coloca un elemento en la página solo si la expresión es verdadera.

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

Para cubrir varios casos, encadena con v-else-if y 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>

Solo uno de esos tres párrafos existe a la vez. Pon inventory a 5, luego a 0, y mira cómo cambia el mensaje.

Las tres directivas tienen que ser vecinas inmediatas

v-else-if y v-else deben ir justo detrás del elemento que lleva el v-if. Basta un comentario u otro elemento entre medias para que Vue avise en la consola de que el v-else no tiene un v-if correspondiente.

Condicionar varios elementos a la vez

Para aplicar una condición a un grupo sin añadir un div inútil, pon el v-if sobre <template>. Esa etiqueta no produce nada en el HTML final.

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

v-show

v-show responde a la misma necesidad, con una mecánica distinta:

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

El elemento está siempre presente en el DOM. Cuando la condición es falsa, Vue se limita a aplicarle display: none. Abre el inspector para comprobarlo:

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>

Cuál elegir

La diferencia está en el coste de la operación.

  • v-if crea y destruye el elemento, y con él sus componentes hijos y sus estados. Coste alto en cada cambio, coste nulo mientras la condición es falsa.
  • v-show se limita a cambiar una propiedad CSS. Coste alto en el primer renderizado, porque el elemento se construye siempre, y coste casi nulo en los cambios siguientes.

En la práctica: v-show para lo que se abre y se cierra a menudo, como un menú o un panel desplegable. v-if para todo lo demás, en especial para lo que cuesta caro construir o no debe existir en absoluto en ciertos casos.

v-show no oculta una información sensible

Un elemento oculto con v-show sigue estando en el HTML: cualquiera lo lee desde el inspector. Para lo que no debe verse, usa v-if y, sobre todo, no lo envíes al navegador.

v-if y v-for en el mismo elemento

No los combines en la misma etiqueta. El bucle v-for es el tema del capítulo siguiente. Desde Vue 3, v-if tiene prioridad y se evalúa antes que el bucle: la variable del bucle todavía no existe, lo que provoca un error. Pon el v-if sobre un <template> interior, o filtra la lista en una propiedad computada. Veremos las dos formas en el capítulo 7.

En Options API

Idéntico. v-if y v-show son directivas de plantilla, lo único que cambia de forma es la declaración de inventory.

EjercicioMuestra «Quedan pocas unidades» cuando inventory sea menor que 5, sin romper los demás mensajes. Después comprueba en el inspector que un elemento oculto con v-show sigue presente en el DOM.

Errores frecuentes

v-else separado de su v-if Las dos directivas deben estar en elementos vecinos inmediatos. Un comentario o una etiqueta entre ambas y Vue señala un v-else sin v-if correspondiente.
v-if y v-for en la misma etiqueta Desde Vue 3, v-if se evalúa antes que v-for: la variable del bucle todavía no existe y Vue lanza un error. Mueve el bucle a un <template> o filtra en una propiedad computada.
Ocultar una información sensible con v-show El elemento se sigue leyendo en el código fuente de la página. Usa v-if y, mejor aún, no lo envíes al navegador.
Newsletter

Las nuevas pruebas, tutoriales y proyectos, por correo.

Pruebas reproducibles, código versionado, resultados fechados. Nunca spam.