Modificadores de eventos

Aparentemente no hablé acerca de esto antes. Los modificadores de eventos permiten declarar aspectos adicionales sobre un evento. La lista completá está en la documentación de Svelte, pero los que creo que vais a encontrar más útiles son el modificador preventDefault, para añadirle automáticamente un preventDefault a cualquier evento, y el once, para que un evento sólo se dispare una vez. Lista completa: https://svelte.dev/tutorial/event-modifiers

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 eventos en Svelte, los modificadores de evento nos ofrecen una forma sencilla y elegante de controlar cómo se comportan esos eventos sin tener que escribir código adicional dentro de nuestras funciones. Estos modificadores son pequeños sufijos que añadimos al declarar un evento, como on:submit o on:click, y que modifican el comportamiento predeterminado de Svelte al procesar esos eventos.

Un ejemplo muy común es el modificador preventDefault. Imaginemos que tenemos un formulario con un botón de búsqueda. Por defecto, cuando enviamos un formulario, el navegador realiza una petición y cambia la página, lo cual no siempre es lo que queremos en una aplicación moderna. Para evitar este comportamiento, normalmente tendríamos que llamar a event.preventDefault() dentro de la función que maneja el evento. Sin embargo, con Svelte podemos simplificar esto usando el modificador preventDefault directamente en la declaración del evento.

En lugar de escribir algo así:

<form on:submit={handleSubmit}>
  <!-- campos del formulario -->
  <button type="submit">Buscar</button>
</form>

<script>
  function handleSubmit(event) {
    event.preventDefault();
    // lógica para desactivar el formulario o manejar la búsqueda
  }
</script>

Podemos eliminar la llamada explícita a event.preventDefault() y usar el modificador en la propia declaración del evento:

<form on:submit|preventDefault={handleSubmit}>
  <!-- campos del formulario -->
  <button type="submit">Buscar</button>
</form>

<script>
  function handleSubmit() {
    // lógica para desactivar el formulario o manejar la búsqueda
  }
</script>

De esta forma, Svelte se encarga automáticamente de llamar a preventDefault() antes de ejecutar nuestra función, haciendo el código más limpio y evitando olvidos.

Otro modificador muy útil es once. Normalmente, cuando asignamos un evento click a un botón, la función asociada se ejecuta cada vez que hacemos clic. Pero a veces queremos que esa función se ejecute solo la primera vez que se hace clic y que luego el evento se desactive automáticamente. Para lograr esto sin complicarnos la vida con variables de estado o lógica extra, podemos usar el modificador once.

Por ejemplo, si tenemos un contador con botones para incrementar y decrementar un valor, y queremos que cada botón solo funcione una vez, podemos declararlo así:

<button on:click|once={incrementar}>+</button>
<button on:click|once={decrementar}>-</button>

<script>
  let contador = 0;

  function incrementar() {
    contador += 1;
  }

  function decrementar() {
    contador -= 1;
  }
</script>

Con esto, al pulsar el botón + o el -, la función correspondiente se ejecutará solo la primera vez. Los clics posteriores no tendrán efecto porque el evento se elimina automáticamente tras la primera ejecución.

Además de estos dos, existen otros modificadores que pueden ser interesantes según el caso, como capture, que hace que el evento se dispare en la fase de captura en lugar de la fase de burbuja, o passive, que se usa para optimizar eventos relacionados con el scroll y mejorar el rendimiento. También hay modificadores como stopPropagation, self o trusted, que controlan aspectos más específicos del flujo y origen de los eventos.

Para no perdernos ninguno y estar al día con posibles nuevos modificadores que se añadan en el futuro, lo mejor es consultar la documentación oficial de Svelte, donde se mantiene una lista completa y actualizada.

En definitiva, los modificadores de evento en Svelte nos permiten escribir código más limpio y eficiente, delegando en el framework tareas comunes como evitar el comportamiento por defecto o limitar la ejecución de eventos, sin necesidad de añadir lógica extra en nuestras funciones. Esto hace que la gestión de interacciones sea más sencilla y el código más legible.

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