Signals
The @rimitive/signals package provides signals, computeds, and effects for reactive state management.
Installation
Section titled “Installation”npm install @rimitive/core @rimitive/signalsQuick Start
Section titled “Quick Start”import { compose } from '@rimitive/core';import { SignalModule, ComputedModule, EffectModule } from '@rimitive/signals/extend';
const { signal, computed, effect } = compose( SignalModule, ComputedModule, EffectModule);
const count = signal(0);const doubled = computed(() => count() * 2);
effect(() => { console.log(`Count: ${count()}, Doubled: ${doubled()}`);});
count(1); // logs: "Count: 1, Doubled: 2"| API | Description |
|---|---|
| signal() | Create reactive state |
| computed() | Derive values from signals |
| effect() | Run side effects when dependencies change |
| batch() | Group updates into a single notification |
| untrack() | Read signals without creating dependencies |
| subscribe() | Subscribe to signal changes with a callback |
| iter() | Reactive linked list with O(1) operations |
Modules
Section titled “Modules”Each API has a corresponding module for composition:
import { SignalModule, ComputedModule, EffectModule, BatchModule, UntrackModule, SubscribeModule, IterModule,} from '@rimitive/signals/extend';Compose only what you need:
// Minimal — just signalsconst svc = compose(SignalModule);
// With derived valuesconst svc = compose(SignalModule, ComputedModule);
// Full reactivityconst svc = compose(SignalModule, ComputedModule, EffectModule, BatchModule);Flush Strategies
Section titled “Flush Strategies”Effects support flush strategies to control when they run:
import { mt, raf, debounce } from '@rimitive/signals/extend';
effect(mt(() => { ... })); // microtaskeffect(raf(() => { ... })); // requestAnimationFrameeffect(debounce(300, () => { ... })); // debouncedSee effect() for details.