Angular 19: Differenza tra computed Signal e linkedSignal

Angular 19 introduce un modello reattivo avanzato, con computed e linkedSignal per una gestione più semplice e flessibile dello stato. I computed signal calcolano automaticamente valori derivati, ideali per calcoli fissi e non modificabili. I linkedSignal offrono invece la possibilità di aggiornare i valori manualmente, mantenendo comunque la reattività. Scopri come e quando usare questi strumenti per ottimizzare la tua app!

Angular 19 ha introdotto un nuovo modello di reattività che rende più facile gestire lo stato e i calcoli automatici basati su segnali (signals). Tra le novità troviamo i computed signals e i linkedSignal, entrambi utili per creare valori derivati e reattivi, ma con differenze sostanziali. Vediamo insieme come funzionano e quando conviene usare uno o l’altro!


1. Computed Signal: Valori Derivati Reattivi

Il computed signal è un segnale read-only (solo in lettura) che si aggiorna automaticamente quando i segnali di cui dipende cambiano. Praticamente, è come una “formula reattiva” che si ricalcola ogni volta che cambia uno dei segnali sorgente.

🧑‍💻 Esempio Pratico con computed

Immagina di avere un’app che calcola il doppio di un numero base. Con computed, non hai bisogno di aggiornare manualmente il valore derivato: si aggiorna automaticamente!

import { signal, computed } from '@angular/core';

// Dichiarazione di un segnale di base
const baseValue = signal(5);

// Computed signal che raddoppia il valore di base
const doubleValue = computed(() => baseValue() * 2);

console.log(doubleValue()); // Output: 10
baseValue.set(7);
console.log(doubleValue()); // Output: 14

In questo caso, doubleValue cambia automaticamente quando cambia baseValue. Però attenzione: non puoi modificarlo direttamente! Il computed signal è “bloccato” sulla sua formula e reagisce solo ai cambiamenti dei segnali sorgente. Questo è ottimo quando hai bisogno di un valore che si aggiorna in modo prevedibile, senza il rischio di modifiche dirette.

Quando Usare un computed Signal?

Utilizza un computed quando vuoi calcolare un valore derivato che dipende in modo fisso da altri segnali. È perfetto per situazioni dove hai bisogno di una reattività semplice e automatica, ad esempio per calcoli che non devono mai essere alterati manualmente.


2. linkedSignal: Flessibilità e Aggiornamenti Bidirezionali

Con il linkedSignal, invece, hai la possibilità di creare segnali che si aggiornano in base a uno o più segnali sorgente, ma con una differenza importante: puoi anche modificare direttamente il valore del linkedSignal, senza influenzare i segnali da cui è derivato.

🧑‍💻 Esempio Pratico con linkedSignal

Supponiamo di voler calcolare il triplo di un numero di base ma, a differenza del computed, vogliamo poter sovrascrivere il risultato manualmente. Con linkedSignal, puoi farlo!

import { signal, linkedSignal } from '@angular/core';

// Segnale di base
const baseValue = signal(10);

// linkedSignal che calcola il triplo di baseValue
const tripleValue = linkedSignal(baseValue, (val) => val * 3);

console.log(tripleValue()); // Output: 30

// Sovrascrivo il valore del linkedSignal senza cambiare baseValue
tripleValue.set(45);
console.log(tripleValue()); // Output: 45

// baseValue rimane 10, anche se ho cambiato triploValue
console.log(baseValue()); // Output: 10

Come vedi, triploValue si inizializza come tre volte baseValue, ma possiamo sovrascrivere il valore senza toccare il baseValue. Questa caratteristica rende il linkedSignal ideale quando hai bisogno di calcoli reattivi, ma vuoi comunque mantenere la libertà di impostare valori specifici.

📌 Quando Usare un linkedSignal?

Il linkedSignal è utile quando hai una relazione di dipendenza che deve rimanere reattiva, ma vuoi anche poter aggiornare il valore derivato indipendentemente. Questo è perfetto in scenari interattivi, ad esempio, per gestire input utente che devono aggiornarsi con lo stato dell’app ma possono anche essere modificati.


Riepilogo: Scegliere tra computed e linkedSignal

Funzionalità computed linkedSignal
Modificabile No
Calcolo Automatico Sì, al cambiamento del sorgente Sì, ma può essere sovrascritto
Ideale per Valori derivati semplici e fissi Valori derivati con modifiche dirette

Con Angular 19, quindi, hai a disposizione strumenti potenti per gestire al meglio lo stato e i calcoli automatici. Ricorda: computed è per valori che devono seguire in modo rigido i segnali sorgente, mentre linkedSignal offre una flessibilità maggiore, permettendoti di aggiornare i valori direttamente se necessario.

Con queste novità Angular punta a rendere il modello reattivo sempre più versatile e modulare, lasciandoti il controllo su come e quando gestire i cambiamenti di stato nelle tue applicazioni.