Reactividad experta con el operador $

El operador $ (dolar o peso) sirve para declarar secciones que tienen que re-evaluarse cuando un componente se actualice y se repinte. Esto es necesario cuando tenemos propiedades en un componente que no se actualizan directamente, pero que son derivadas de otras propiedades que sí se van a actualizar.

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.

La reactividad en Svelte es un concepto fundamental que se basa en cómo el framework detecta y responde a los cambios en las variables para actualizar la interfaz de usuario. En esencia, Svelte utiliza el operador igual para identificar cuándo una variable ha cambiado y, a partir de ahí, decide si debe repintar el componente correspondiente. Esto significa que cada vez que asignamos un nuevo valor a una variable con =, el compilador de Svelte interpreta esa acción como una señal para actualizar la vista.

Sin embargo, esta forma de detectar cambios tiene algunas particularidades que debemos tener en cuenta. Por ejemplo, si modificamos directamente una propiedad interna de un objeto o un elemento dentro de un array, como hacer un push o cambiar una propiedad con obj.prop = valor, Svelte no siempre detectará ese cambio automáticamente. Para que la reactividad funcione correctamente en estos casos, es necesario reasignar la variable completa, usando técnicas como el operador spread o métodos que devuelvan un nuevo array, como filter. Así, al hacer una asignación completa, el compilador puede detectar el cambio y actualizar la interfaz.

Un aspecto interesante es cómo manejar variables derivadas, es decir, aquellas cuyo valor depende de otras variables. Por ejemplo, si tenemos una variable nombreCompleto que se construye concatenando nombre y apellido, una asignación simple como nombreCompleto = nombre + " " + apellido solo se ejecuta una vez, al cargar el componente. Si luego cambiamos nombre o apellido, nombreCompleto no se actualizará automáticamente porque no hay una asignación posterior que lo indique.

Para resolver esto, Svelte ofrece el operador dólar $, que permite crear bloques reactivos que se vuelven a evaluar cada vez que cambian las variables de las que dependen. La sintaxis consiste en escribir $: seguido de una expresión o bloque de código. Por ejemplo:

$: nombreCompleto = nombre + " " + apellido;

Este bloque se ejecuta inicialmente y también cada vez que cambie nombre o apellido, actualizando así nombreCompleto de forma automática y manteniendo la interfaz sincronizada.

Podemos usar tantos bloques $: como necesitemos en un componente, y el compilador se encargará de analizar las dependencias de cada uno para saber cuándo deben reevaluarse. Esto es especialmente útil para realizar cálculos o ejecutar código que dependa de varias variables y que queramos mantener actualizado sin tener que escribir manualmente manejadores de eventos o funciones adicionales.

Además, los bloques reactivos con $: pueden contener cualquier código JavaScript válido, incluyendo llamadas a funciones o instrucciones como console.log. Por ejemplo, si queremos ejecutar un código cada vez que alguna variable cambie, podemos escribir:

$: {
  console.log('Se ha actualizado alguna variable reactiva');
}

Este bloque se ejecutará cada vez que cambie alguna variable que esté dentro de su ámbito de dependencia. Si queremos que dependa explícitamente de ciertas variables, podemos incluirlas en la expresión o dentro del bloque para que el compilador las detecte.

El operador $: es una herramienta poderosa para gestionar reactividad avanzada en Svelte, permitiéndonos controlar cuándo y cómo se actualizan las variables derivadas o ejecutar código adicional en respuesta a cambios en el estado del componente. Esto facilita la creación de interfaces dinámicas y eficientes sin la necesidad de escribir código complejo para manejar actualizaciones manuales.

En resumen, la clave para entender la reactividad en Svelte está en el operador igual para detectar cambios directos y en el operador dólar para crear bloques reactivos que se ejecutan automáticamente cuando cambian sus dependencias. Así, podemos construir aplicaciones reactivas de forma sencilla y elegante, aprovechando al máximo las capacidades del framework.

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