Rust implementation of NextGraph, a Decentralized and local-first web 3.0 ecosystem
https://nextgraph.org
byzantine-fault-tolerancecrdtsdappsdecentralizede2eeeventual-consistencyjson-ldlocal-firstmarkdownocapoffline-firstp2pp2p-networkprivacy-protectionrdfrich-text-editorself-hostedsemantic-websparqlweb3collaboration
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.
32 lines
687 B
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();
|
|
};
|
|
}
|
|
|