Rust implementation of NextGraph, a Decentralized and local-first web 3.0 ecosystem https://nextgraph.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nextgraph-rs/sdk/js/alien-deepsignals/src/watchEffect.ts

32 lines
687 B

import { effect as coreEffect } from "./core";
/** Run a reactive function and re-run on its dependencies; supports cleanup. */
export function watchEffect(
fn: (registerCleanup?: (cleanup: () => void) => void) => void
) {
let cleanup: (() => void) | undefined;
const registerCleanup = (cb: () => void) => {
cleanup = cb;
};
const stop = coreEffect(() => {
if (cleanup) {
try {
cleanup();
} catch {
/* ignore */
} finally {
cleanup = undefined;
}
}
fn(registerCleanup);
});
return () => {
if (cleanup) {
try {
cleanup();
} catch {
/* ignore */
}
}
stop();
};
}