Atributos condicionales e IF

El lenguaje de marcado empleado en los archivos de Svelte incluye una serie de directivas extra que podemos utilizar en los componentes para distintos propósitos. Hoy evaluamos uno de ellos, que nos va a permitir renderizar condicionalmente parte del marcado de un componente en función de si una condición se está cumpliendo o no.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Cuando trabajamos con Svelte, una de las grandes ventajas que encontramos es la capacidad de crear interfaces reactivas que responden automáticamente a los cambios en los datos. Esto nos permite, por ejemplo, controlar cuándo un botón debe estar activo o desactivado según el contenido que el usuario haya introducido. Imaginemos que tenemos un formulario donde pedimos el nombre de una persona y queremos asegurarnos de que no pueda enviar el formulario si el campo está vacío.

En HTML, sabemos que el atributo disabled en un botón sirve para desactivarlo. Lo interesante en Svelte es que podemos hacer que este atributo aparezca o desaparezca dinámicamente según el valor de una variable. Por ejemplo, si tenemos una variable nombre que almacena el texto introducido, podemos condicionar la presencia del atributo disabled en el botón con una expresión JavaScript. Así, si nombre está vacío, el botón estará desactivado; si no, estará activo.

Para lograr esto, podemos escribir algo como:

<button disabled={nombre.length === 0}>Enviar mensaje</button>

Aquí, cuando nombre.length === 0 es verdadero, el atributo disabled se añade al botón, desactivándolo. Si la condición es falsa, Svelte omite el atributo, y el botón queda habilitado. Gracias a la reactividad, cada vez que el usuario escribe o borra texto, esta expresión se reevalúa y el botón cambia su estado automáticamente.

Pero Svelte nos ofrece aún más control con su sintaxis especial para condicionales en el marcado. Podemos usar bloques if para mostrar u ocultar elementos según ciertas condiciones. La sintaxis es peculiar: para abrir un bloque if usamos {#if condición}, y para cerrarlo { /if }. Por ejemplo, si queremos mostrar un mensaje cuando el campo de nombre esté vacío, podemos hacer:

{#if nombre.length === 0}
  <p>No me has dicho cómo te llamas.</p>
{/if}

Este párrafo solo se renderizará cuando la condición sea verdadera, es decir, cuando el campo esté vacío. Si el usuario escribe algo, el párrafo desaparece porque el bloque if ya no se cumple.

Además, Svelte permite manejar la alternativa con un bloque else, que se escribe como { :else }. Esto nos permite mostrar un mensaje diferente cuando la condición no se cumple. Por ejemplo, para saludar al usuario cuando haya introducido su nombre, podemos hacer:

{#if nombre.length === 0}
  <p>No me has dicho cómo te llamas.</p>
{:else}
  <strong>Hola {nombre}</strong>
{/if}

Así, si el campo está vacío, mostramos el mensaje de aviso, y si no, saludamos al usuario con su nombre. La interpolación de variables en Svelte es sencilla y directa, lo que facilita crear interfaces dinámicas y amigables.

Con estas herramientas, podemos controlar no solo la presencia o ausencia de atributos en elementos HTML, sino también qué contenido se muestra en función de los datos que manejamos. Esto hace que nuestros componentes sean mucho más inteligentes y reactivos, mejorando la experiencia del usuario sin complicar demasiado el código.

Lista de reproducción
  1. 1
    ¿Qué es Svelte?
    9 minutos
  2. 2
    ¿Cómo crear un proyecto de Svelte?
    7 minutos
  3. 3
    Creando nuestro primer componente
    7 minutos
  4. 4
    Datos dinámicos y props
    7 minutos
  5. 5
    Anidando componentes
    7 minutos
  6. 6
    Capturando eventos
    7 minutos
  7. 7
    Eventos y reactividad
    8 minutos
  8. 8
    Atributos condicionales e IF
    9 minutos
  9. 9
    Bucles
    11 minutos
  10. 10
    Bloques await
    7 minutos
  11. 11
    Bind
    8 minutos
  12. 12
    bind:this
    6 minutos
  13. 13
    ¿Para qué nos sirve un evento personalizado?
    6 minutos
  14. 14
    createEventDispatcher
    6 minutos
  15. 15
    Eventos con detalles
    7 minutos
  16. 16
    Reenviando eventos
    6 minutos
  17. 17
    Ejemplo de eventos (primera parte)
    12 minutos
  18. 18
    Ejemplo de eventos (y segunda parte)
    16 minutos
  19. 19
    Modificadores de eventos
    6 minutos
  20. 20
    Fundamentos del CSS con Svelte
    9 minutos
  21. 21
    Clases condicionales
    7 minutos
  22. 22
    Estilos en línea y variables CSS
    8 minutos
  23. 23
    Estilos globales
    6 minutos
  24. 24
    Importar hojas de estilo externas
    5 minutos
  25. 25
    Reactividad experta con el operador $
    8 minutos
  26. 26
    Slots (parte 1 de 2)
    5 minutos
  27. 27
    Slots (parte 2 de 2)
    7 minutos
  28. 28
    Directivas svelte:window, svelte:head, svelte:body
    4 minutos
  29. 29
    Actualizar de Rollbar a Vite 3
    11 minutos
  30. 30
    Exportar a Web Components
    10 minutos
  31. 31
    Integrar TypeScript, SCSS, PostCSS...
    8 minutos
  32. 32
    Hasta aquí (por ahora)
    3 minutos
  33. 33
    Lo que se viene con Svelte 5
    13 minutos