Slots (parte 1 de 2)

Los slots son huecos que tienen los componentes y que pueden ser rellenados por los componentes descendientes. La idea es permitir crear componentes más reusables, o componentes de alto nivel, donde se pueden proporcionar a un componente ya no solo atributos, sino también todo un nodo DOM descendiente.

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.

Los slots en Svelte son una herramienta fundamental para construir componentes más flexibles y reutilizables. Nos permiten insertar contenido HTML personalizado dentro de otros componentes, superando las limitaciones que tienen los atributos cuando queremos pasar estructuras DOM más complejas.

Para entenderlo mejor, imaginemos que queremos crear un componente llamado Seccion que represente una sección en una barra lateral. Este componente podría tener un título fijo, por ejemplo un h1, y luego un contenido variable que queramos mostrar dentro. Una forma sencilla sería pasar el título como un atributo, algo así como titulo="Menú del día". Pero, ¿qué pasa si queremos pasar varios párrafos con estilos, negritas o cursivas? Intentar meter todo eso en atributos se vuelve poco práctico y limitado.

Aquí es donde entran en juego los slots. Con ellos, podemos definir un espacio dentro del componente donde se insertará el contenido que le pasemos desde fuera, incluyendo todo el árbol DOM que queramos. Para usar un slot, simplemente colocamos una etiqueta <slot> dentro del componente. Por ejemplo, nuestro componente Seccion podría tener esta estructura:

<script>
  export let titulo;
</script>

<section>
  <h1>{titulo}</h1>
  <slot></slot>
</section>

Luego, cuando usemos este componente, podemos pasarle cualquier contenido dentro de sus etiquetas, y ese contenido reemplazará el slot:

<Seccion titulo="Menú del día">
  <p>Chopitos</p>
  <p><strong>Pescado</strong> y <em>fruta</em> del día</p>
</Seccion>

Esto nos da mucha libertad para componer interfaces con contenido dinámico y estructurado sin complicarnos con atributos para cada elemento.

Además, los slots pueden tener un contenido por defecto o fallback. Esto significa que si no pasamos nada dentro del slot, se mostrará un contenido predeterminado. Por ejemplo, si definimos el slot así:

<slot>
  <p>Pregunte en la barra</p>
</slot>

Cuando usemos el componente sin contenido dentro, aparecerá el mensaje Pregunte en la barra. Pero si le pasamos algo, ese contenido sustituirá al fallback.

Esta característica es muy útil para evitar que la interfaz quede vacía cuando no se proporciona contenido, asegurando que siempre haya algo visible para el usuario.

En resumen, los slots en Svelte nos permiten importar árboles DOM completos dentro de componentes, facilitando la creación de interfaces más escalables y personalizables. En la siguiente parte profundizaremos en los slots con nombre, que nos ofrecen aún más control sobre dónde y cómo insertar contenido dentro de nuestros componentes.

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