Signals
Los signals son la primitiva reactiva de Angular: un signal guarda un valor, registra dónde se lee y avisa a esos lectores cuando el valor cambia.
Un signal es un envoltorio alrededor de un valor. Se lee llamándolo como función, y se cambia con set o update. Cuando un template u otro código reactivo lee un signal, Angular registra esa dependencia. Cuando el valor cambia, Angular sabe qué componentes necesitan actualizarse.
Hay tres piezas básicas:
signal()crea un valor que se puede escribir.computed()deriva un valor de otros signals y se recalcula solo cuando estos cambian.effect()ejecuta un efecto secundario cuando cambian los signals que lee.
Ejemplo
export class CartComponent {
items = signal<Item[]>([]);
total = computed(() =>
this.items().reduce((sum, item) => sum + item.price, 0));
add(item: Item) {
this.items.update(list => [...list, item]);
}
}
El template lee total(). Cuando se ejecuta add, el total se recalcula y la vista se actualiza. No hay ninguna suscripción que administrar.
Confusión frecuente
A menudo se describe a los signals como el reemplazo de RxJS. Cubren terrenos distintos. Un signal siempre tiene un valor actual y sirve para el estado que la vista muestra. Un observable modela eventos en el tiempo, como respuestas HTTP, mensajes de WebSocket o entradas del usuario que necesitan debounce. La mayoría de las aplicaciones usa ambos, y toSignal y toObservable convierten entre uno y otro.
Un segundo error es usar effect() para copiar un signal en otro. Ese trabajo le corresponde a computed(). Los effects están pensados para tareas fuera del grafo reactivo, como registrar logs o escribir en local storage.
Para quienes vienen de AngularJS, los signals reemplazan el modelo mental de $scope y $watch por dependencias explícitas. La referencia de AngularJS a Angular muestra las equivalencias.
Por qué importa. Los signals son el equivalente moderno de los bindings de scope y los watchers de AngularJS, y por eso son el destino natural del estado migrado. También son la base para ejecutar Angular sin Zone.js.
Términos relacionados
¿Planeas una migración o una plataforma de microfrontends?
En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.
Escríbeme por LinkedIn