Nexanexa
← Referencia

@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 setter

Un 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.