@nexa/reactivity
Sin Virtual DOM — señales que notifican directo a quien las lea. Para escribir una isla a mano.
state() — Signal
import { state } from "@nexa/reactivity";
const count = state(0);
count.value = 1; // dispara efectos suscriptos.value lee y suscribe; .peek() lee sin suscribir. Escribir .value dispara los efectos que la leyeron, agrupado por microtask.
computed()
import { computed } from "@nexa/reactivity";
const doubled = computed(() => count.value * 2);
doubled.value; // sin setterUn ReadonlySignal que se recalcula solo. Encadenar computeds funciona, con un costo real: cada salto es una vuelta más de microtask.
effect()
import { effect } from "@nexa/reactivity";
const stop = effect(() => {
console.log(count.value);
});
stop();Corre ya, y de nuevo cada vez que cambie algo que leyó. Devuelve una función para desactivarlo.
watch()
import { watch } from "@nexa/reactivity";
watch(
() => count.value,
(nuevo, viejo) => console.log(nuevo, viejo),
);Como effect, pero NO corre al crearse — solo en cambios posteriores. Recibe el valor nuevo y el viejo.
bindText()
import { bindText } from "@nexa/reactivity";
bindText(node, () => count.value);Lo que el compilador genera automáticamente para {data.x} en el cuerpo de una página — no es algo que normalmente escribas a mano.
mountComponent() — solo dentro de islas
import { mountComponent, type Component } from "@nexa/reactivity";
const List: Component<{ labels: string[] }> = (el, props, ctx) => {
for (const label of props.labels) {
const li = document.createElement("li");
el.appendChild(li);
ctx.mount(Item, li, { label });
}
};No aplica a páginas Nexa Core. Component<P>, props tipadas, y limpieza encadenada — sin Virtual DOM.