import { Signal } from "@moq/signals";// Basic signalconst name = new Signal("Alice");// Signal from value or existing signalconst derived = Signal.from(name); // returns same signal if already a Signalconst copy = Signal.from("Bob"); // creates new signal
const count = new Signal(0);// Set directlycount.set(10);// Set based on previous valuecount.set(prev => prev + 1);// Update (same as set with function)count.update(prev => prev * 2);// Mutate object/array in placeconst list = new Signal([1, 2, 3]);list.mutate(arr => { arr.push(4);});
// Wait for the first signal to changeconst signal1 = new Signal("a");const signal2 = new Signal("b");const result = await Signal.race(signal1, signal2);// Returns value of whichever signal changes first
import { Effect, Signal } from "@moq/signals";const name = new Signal("Alice");const effect = new Effect((e) => { const value = e.get(name); console.log("Hello,", value);});// Output immediately: "Hello, Alice"name.set("Bob");// Output: "Hello, Bob"effect.close();
const count = new Signal(0);const multiplier = new Signal(2);const effect = new Effect((e) => { const c = e.get(count); const m = e.get(multiplier); console.log("Result:", c * m);});// Changes to either signal will rerun the effect
const firstName = new Signal("John");const lastName = new Signal("Doe");// Create a "computed" signal using an effectconst fullName = new Signal("");const effect = new Effect((e) => { const first = e.get(firstName); const last = e.get(lastName); fullName.set(`${first} ${last}`);});console.log(fullName.peek()); // "John Doe"firstName.set("Jane");console.log(fullName.peek()); // "Jane Doe"
const enabled = new Signal(true);const value = new Signal(0);const effect = new Effect((e) => { if (e.get(enabled)) { const v = e.get(value); console.log("Value:", v); } else { console.log("Disabled"); }});
const signals = [sig1, sig2, sig3];const effect = new Effect((e) => { // Get all values, returns undefined if any are falsy const values = e.getAll(signals); if (values) { console.log("All values:", values); }});
// Bad: infinite loop!const count = new Signal(0);const effect = new Effect((e) => { const value = e.get(count); count.set(value + 1); // This will trigger the effect again!});// Good: set without notifyconst effect = new Effect((e) => { const value = e.get(count); count.set(value + 1, false); // Don't notify subscribers});