createEventDispatcher

createEventDispatcher es la función principal que nos va a permitir crear despachadores, que es lo que podemos usar para propagar hacia arriba un evento personalizado cuando estamos en un componente Svelte.

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.

Vamos a construir una pequeña aplicación en Svelte que nos permita entender cómo propagar eventos desde un subcomponente hacia el componente principal. La idea es sencilla: tenemos un botón que, al pulsarlo, debe notificar a la aplicación principal para que actualice un contador que indica cuántas veces se ha pulsado.

Aunque podríamos hacer todo en un único componente, aquí queremos simular un escenario más realista donde el botón es un subcomponente independiente. Esto puede ocurrir porque estemos usando un componente importado de una librería externa o porque nuestro equipo de diseño nos haya proporcionado un botón con estilos y funcionalidades específicas. En cualquier caso, el botón genera eventos localmente, pero necesitamos que la aplicación principal se entere de esos eventos para reaccionar.

Para lograr esta comunicación hacia arriba, Svelte nos ofrece la función createEventDispatcher. Esta función la importamos directamente desde el paquete svelte y nos permite crear un despachador de eventos personalizado. Cuando llamamos a createEventDispatcher, obtenemos una función que podemos usar para emitir eventos con un nombre y, opcionalmente, con datos adicionales.

En el subcomponente del botón, declaramos el despachador así:

import { createEventDispatcher } from 'svelte';

const dispatch = createEventDispatcher();

function pulsar() {
  dispatch('pulsado');
}

Aquí, la función pulsar se ejecuta cuando el usuario hace clic en el botón. Al llamar a dispatch('pulsado'), estamos emitiendo un evento llamado pulsado que podrá ser capturado por el componente padre.

Es importante pensar bien en los nombres que damos a estos eventos para evitar confusiones, especialmente si la aplicación crece y hay muchos eventos diferentes. Aunque en este ejemplo usamos un nombre simple como pulsado, en proyectos más complejos conviene establecer una convención clara.

En el componente principal, donde usamos el subcomponente botón, podemos escuchar este evento con la sintaxis habitual de Svelte para eventos personalizados:

<Button on:pulsado={sePulso} />

Aquí, sePulso es una función que definimos para manejar el evento. Por ejemplo, podemos incrementar un contador cada vez que se recibe el evento:

let veces = 0;

function sePulso() {
  veces += 1;
}

Así, cada vez que el botón se pulsa, el evento pulsado se dispara desde el subcomponente, llega al componente padre y ejecuta la función que actualiza el contador.

Este mecanismo de propagación funciona siempre hacia el componente padre inmediato. Si necesitamos enviar eventos más arriba en la jerarquía, habría que considerar otras estrategias, pero para la mayoría de casos esta forma es suficiente y muy sencilla de implementar.

Además, aunque en este ejemplo no hemos añadido datos adicionales al evento, dispatch permite enviar un segundo argumento con información extra, lo que puede ser útil para pasar detalles sobre la interacción.

Con este patrón, podemos mantener nuestros componentes bien organizados y comunicados sin necesidad de recurrir a soluciones más complejas. La función createEventDispatcher es una herramienta muy potente y simple para manejar eventos personalizados en Svelte.

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