Les signaux
Un signal est l'unité d'état réactif. createSignal renvoie un couple lecteur/écrivain :
import { createSignal } from '@fluixi/reactive/signal';
const [count, setCount] = createSignal(0);
count(); // lecture → 0
setCount(1); // écriture → 1
setCount(c => c + 1); // mise à jour depuis la valeur précédente → 2
Lire, c'est s'abonner
Appeler le lecteur dans un mémo ou un effet abonne ce calcul au signal. La prochaine écriture ne ré-exécute que les calculs qui l'ont lu :
createEffect(() => {
console.log('count vaut', count()); // s'abonne à count
});
setCount(5); // affiche « count vaut 5 »
Lire hors de toute portée réactive renvoie simplement la valeur — sans abonnement.
Égalité
Par défaut, un signal ne notifie pas ses lecteurs si la nouvelle valeur est === à l'ancienne.
Passez equals pour personnaliser, ou equals: false pour toujours notifier :
const [list, setList] = createSignal([], { equals: false });
Lire sans s'abonner
Utilisez untrack pour lire un signal sans créer de dépendance :
import { untrack } from '@fluixi/reactive/signal';
createEffect(() => {
draw(count(), untrack(theme)); // se ré-exécute sur count, mais pas sur theme
});
Suivant : Les valeurs dérivées.