Anidando componentes

Centrémonos un momento en el propósito de anidar componentes y de meter unos componentes dentro de otros. Svelte está pensado como un framework orientado a componentes, por lo que la idea es fabricar componentes independientes que hagan una cosa, como un botón, una casilla de verificación, o un buscador, y luego fabricar componentes superiores que vayan agrupando para fabricar secciones completos de la interfaz.

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 Esbelte, una de las habilidades fundamentales que debemos dominar es la creación de componentes anidados. Esta técnica nos permite construir aplicaciones modulares y organizadas, donde cada parte de la interfaz se encapsula en un componente independiente que puede contener a su vez otros componentes. Así, podemos pensar en una aplicación como un conjunto jerárquico de piezas que se ensamblan para formar una experiencia completa.

Para ilustrar esto, imaginemos que queremos crear un componente llamado Interior que muestre un saludo personalizado. Lo primero que hacemos es crear un archivo interior.esbelte dentro de la carpeta src. En este componente, definimos un encabezado que saluda a un nombre que recibirá como propiedad (prop). Además, le aplicamos un estilo sencillo para diferenciarlo visualmente, por ejemplo, un color púrpura y un tamaño de fuente de 2.5 rem.

<script>
  export let nombre;
</script>

<h1 style="color: purple; font-size: 2.5rem;">
  Hola, {nombre}
</h1>

Una vez que tenemos este componente, podemos utilizarlo dentro del componente principal, que suele ser App. Para ello, primero importamos Interior en el archivo App.esbelte con la sintaxis habitual de importación, asegurándonos de incluir la extensión .esbelte para que el compilador lo reconozca correctamente.

<script>
  import Interior from './interior.esbelte';
</script>

Luego, para insertar el componente en el marcado, usamos una etiqueta con el mismo nombre que la variable importada, respetando la mayúscula inicial para diferenciarlo de las etiquetas HTML estándar. Si el componente no tiene contenido hijo, cerramos la etiqueta con una barra diagonal al final, como en <Interior />.

<Interior nombre="Dani" />

Es importante pasar las propiedades que el componente espera. En este caso, Interior requiere la prop nombre, que le proporcionamos como un atributo en la etiqueta. Si olvidamos pasarla, Esbelte nos avisará de que falta ese dato.

Además, podemos pasar variables como props usando llaves para interpolar su valor. Por ejemplo, si tenemos una variable momento con el valor "bonita tarde", podemos pasarla así:

<script>
  import Interior from './interior.esbelte';
  let momento = "bonita tarde";
</script>

<Interior nombre={momento} />

Esto hará que el saludo muestre Hola, bonita tarde. También existe una sintaxis abreviada para pasar props cuando el nombre del atributo y el de la variable coinciden. En lugar de escribir nombre={nombre}, podemos simplemente escribir:

<Interior {nombre} />

Esto es especialmente útil para mantener el código limpio y legible.

Un detalle que merece la pena destacar es cómo Esbelte maneja los estilos de los componentes. Aunque usemos etiquetas HTML iguales en diferentes componentes, sus estilos se aíslan para evitar conflictos. Por ejemplo, un <h1> en App y otro en Interior pueden tener estilos distintos sin interferir entre sí, gracias a que Esbelte genera clases únicas para cada componente.

Finalmente, la convención de usar mayúsculas para los nombres de componentes es clave para que Esbelte distinga entre etiquetas HTML nativas y componentes personalizados. Esto facilita la lectura del código y evita confusiones, siguiendo una práctica común en frameworks modernos como React y Vue.

Con estas bases, podemos empezar a construir aplicaciones más complejas y organizadas, combinando componentes anidados y pasando datos entre ellos de forma sencilla y clara.

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