Les valeurs dérivées
Un mémo dérive une valeur d'autres sources réactives. Créé avec createMemo, il met son
résultat en cache et ne se recalcule que lorsqu'une de ses dépendances change :
import { createSignal, createMemo } from '@fluixi/reactive/signal';
const [first, setFirst] = createSignal('Ada');
const [last, setLast] = createSignal('Lovelace');
const fullName = createMemo(() => `${first()} ${last()}`);
fullName(); // « Ada Lovelace »
Paresseux et mis en cache
Un mémo ne calcule que lorsqu'il est lu, et ne recalcule que si une dépendance change vraiment. Le relire renvoie la valeur en cache, gratuitement :
const expensive = createMemo(() => heavyCompute(data()));
expensive(); // calcule une fois
expensive(); // en cache — aucun recalcul
Si rien n'observe un mémo, il ne s'exécute jamais.
Sans incohérence (glitch-free)
Quand un changement se diffuse puis re-converge, un mémo recalcule exactement une fois avec des entrées cohérentes — jamais avec une valeur à moitié mise à jour :
const [a, setA] = createSignal(1);
const b = createMemo(() => a() + 1);
const c = createMemo(() => a() * 2);
const d = createMemo(() => b() + c()); // recalcule une seule fois par changement de a
setA(2); // d recalcule une seule fois
Suivant : Les effets.