AtomRef
Mutable reactive references for local, in-memory state.
AtomRef provides small observable state cells that can be read, updated, mapped, and subscribed to without going through an AtomRegistry. Mutable refs can also create refs for nested properties. The module also provides a collection helper that stores item refs and notifies subscribers when items are inserted, removed, or changed.
Constructors
collection
Signature
declare function collection<A>(items: Iterable<A>): Collection<A>;Creates a mutable reactive reference initialized with the supplied value.
Signature
declare function make<A>(value: A): AtomRef<A>;Models
A mutable reactive reference.
Details
It supports replacing the whole value, updating it from the current value, and creating mutable references to nested properties.
Signature
interface AtomRef<A> extends ReadonlyRef<A> {
readonly prop: <K extends string | number | symbol>(prop: K) => AtomRef<A[K]>;
readonly set: (value: A) => AtomRef<A>;
readonly update: (f: (value: A) => A) => AtomRef<A>;
}Collection interface
A reactive collection of mutable item references.
Details
The collection can push, insert, and remove item refs, and toArray returns the current raw item values.
Signature
interface Collection<A> extends ReadonlyRef<ReadonlyArray<AtomRef<A>>> {
readonly insertAt: (index: number, item: A) => Collection<A>;
readonly push: (item: A) => Collection<A>;
readonly remove: (ref: AtomRef<A>) => Collection<A>;
readonly toArray: () => Array<A>;
}ReadonlyRef interface
A read-only reactive reference.
Details
It exposes a stable key, the current value, subscriptions to value changes, and map for creating derived read-only references. Equality and hashing are based on the current value.
Signature
interface ReadonlyRef<A> extends Equal {
readonly "~effect/reactivity/AtomRef": "~effect/reactivity/AtomRef";
readonly key: string;
readonly map: <B>(f: (a: A) => B) => ReadonlyRef<B>;
readonly subscribe: (f: (a: A) => void) => () => void;
readonly value: A;
}
Creates a reactive collection from an iterable of initial item values.
Details
Each item is wrapped in an
AtomRef, and changes to item refs notify the collection subscribers.