Skip to content

Sponsor

Sponsor

All 14 Methods Explained

Every namespace method with its instance-style equivalent, parameters, and return value.


Core State Methods

ReactiveUtils.set(state, updates)

Sets state values. Supports functional updates (pass a function to compute the new value from the old value).

javascript
const state = state({ count: 0, name: 'Alice' });

// Set a static value
ReactiveUtils.set(state, { name: 'Bob' });

// Set with a function (receives the previous value)
ReactiveUtils.set(state, { count: prev => prev + 1 });

console.log(state.count);  // 1
console.log(state.name);   // 'Bob'
Details
Instance equivalentstate.set(updates)
Parametersstate — reactive state, updates — object with values or functions
ReturnsThe state

ReactiveUtils.cleanup(state)

Disposes all effects, watchers, and computed properties associated with a state.

javascript
const state = state({ count: 0 });

effect(() => {
  console.log(state.count);
});

state.count = 1;  // Logs: 1

ReactiveUtils.cleanup(state);

state.count = 2;  // Nothing logged — effects are disposed
Details
Instance equivalentstate.cleanup()
Parametersstate — reactive state
Returnsundefined

ReactiveUtils.getRaw(state)

Gets the raw, non-reactive version of the state object. Useful when you need to pass state data to an external library that doesn't work with proxies.

javascript
const state = state({ name: 'Alice', age: 30 });

const raw = ReactiveUtils.getRaw(state);
console.log(raw);  // { name: 'Alice', age: 30 } — plain object, no proxy

How it works internally:

ReactiveUtils.getRaw(state)

1️⃣ Does toRaw(state) exist?
   ├── YES → return toRaw(state)
   └── NO  ↓
2️⃣ Does toRaw exist?
   ├── YES → return toRaw(state)
   └── NO  → return state (as-is)
Details
Instance equivalentstate.raw (property, not method)
Parametersstate — reactive state
ReturnsThe raw object

Async State Methods

ReactiveUtils.execute(asyncState, fn)

Runs an async function with automatic cancellation and race condition prevention.

javascript
const users = asyncState([]);

await ReactiveUtils.execute(users, async (signal) => {
  const response = await fetch('/api/users', { signal });
  return response.json();
});

console.log(users.data);       // [...users]
console.log(users.isSuccess);  // true
Details
Instance equivalentasyncState.execute(fn)
ParametersasyncState — async reactive state, fn — async function receiving AbortSignal
ReturnsPromise with { success, data/error/stale/aborted }

ReactiveUtils.abort(asyncState)

Cancels the current in-flight async operation.

javascript
const users = asyncState([]);

ReactiveUtils.execute(users, async (signal) => {
  const response = await fetch('/api/users', { signal });
  return response.json();
});

// Cancel the request
ReactiveUtils.abort(users);

console.log(users.loading);  // false
Details
Instance equivalentasyncState.abort()
ParametersasyncState — async reactive state
Returnsundefined

ReactiveUtils.reset(asyncState)

Resets async state to its initial values. Also aborts any in-flight request.

javascript
const users = asyncState([]);

await ReactiveUtils.execute(users, fetchUsers);
console.log(users.data);  // [...users]

ReactiveUtils.reset(users);
console.log(users.data);      // [] (initial value)
console.log(users.loading);   // false
console.log(users.error);     // null
Details
Instance equivalentasyncState.reset()
ParametersasyncState — async reactive state
Returnsundefined

ReactiveUtils.refetch(asyncState)

Re-runs the last function passed to execute.

javascript
const users = asyncState([]);

await ReactiveUtils.execute(users, async (signal) => {
  const res = await fetch('/api/users', { signal });
  return res.json();
});

// Later, refresh the data:
await ReactiveUtils.refetch(users);
Details
Instance equivalentasyncState.refetch()
ParametersasyncState — async reactive state
ReturnsPromise (or undefined if no previous function)

Component Method

ReactiveUtils.destroy(component)

Destroys a component, cleaning up all effects, watchers, and resources.

javascript
const counter = component({
  state: { count: 0 },
  actions: {
    increment() { this.count++; }
  }
});

counter.increment();
console.log(counter.count);  // 1

ReactiveUtils.destroy(counter);
// Component is fully torn down
Details
Instance equivalentcomponent.destroy()
Parameterscomponent — reactive component
Returnsundefined

Storage Methods

ReactiveUtils.save(state)

Forces an immediate save of the state to storage.

javascript
const state = state({ theme: 'dark' });
autoSave(state, 'settings');

state.theme = 'light';

// Force save immediately (bypasses debounce)
ReactiveUtils.save(state);
Details
Instance equivalentstate.save()
Parametersstate — storage-enabled reactive state
Returnstrue on success, false on error

ReactiveUtils.load(state)

Loads data from storage, overwriting the current state.

javascript
ReactiveUtils.load(state);
console.log(state.theme);  // Loaded from localStorage
Details
Instance equivalentstate.load()
Parametersstate — storage-enabled reactive state
Returnstrue if data was found, false if not

ReactiveUtils.clear(state)

Removes this state's data from storage.

javascript
ReactiveUtils.clear(state);
// localStorage key is removed
Details
Instance equivalentstate.clear()
Parametersstate — storage-enabled reactive state
Returnstrue on success, false on error

ReactiveUtils.exists(state)

Checks if saved data exists in storage.

javascript
if (ReactiveUtils.exists(state)) {
  console.log('Saved data found');
}
Details
Instance equivalentstate.exists()
Parametersstate — storage-enabled reactive state
Returnstrue or false

ReactiveUtils.stopAutoSave(state)

Pauses automatic saving. State changes won't be persisted until startAutoSave is called.

javascript
ReactiveUtils.stopAutoSave(state);

state.count = 99;  // NOT saved

ReactiveUtils.startAutoSave(state);
Details
Instance equivalentstate.stopAutoSave()
Parametersstate — storage-enabled reactive state
ReturnsThe state

ReactiveUtils.startAutoSave(state)

Resumes automatic saving after it was paused.

javascript
ReactiveUtils.startAutoSave(state);
state.count = 100;  // Saved again
Details
Instance equivalentstate.startAutoSave()
Parametersstate — storage-enabled reactive state
ReturnsThe state

ReactiveUtils.storageInfo(state)

Gets information about the stored data.

javascript
const info = ReactiveUtils.storageInfo(state);
console.log(info);
// {
//   key: 'settings',
//   namespace: 'myApp',
//   storage: 'localStorage',
//   exists: true,
//   size: 256,
//   sizeKB: 0.3
// }
Details
Instance equivalentstate.storageInfo()
Parametersstate — storage-enabled reactive state
ReturnsObject with key, namespace, storage, exists, size, sizeKB

Quick Reference: All 14 Methods

Namespace MethodInstance EquivalentCategory
ReactiveUtils.set(state, updates)state.set(updates)Core
ReactiveUtils.cleanup(state)state.cleanup()Core
ReactiveUtils.getRaw(state)state.rawCore
ReactiveUtils.execute(async, fn)asyncState.execute(fn)Async
ReactiveUtils.abort(async)asyncState.abort()Async
ReactiveUtils.reset(async)asyncState.reset()Async
ReactiveUtils.refetch(async)asyncState.refetch()Async
ReactiveUtils.destroy(comp)component.destroy()Component
ReactiveUtils.save(state)state.save()Storage
ReactiveUtils.load(state)state.load()Storage
ReactiveUtils.clear(state)state.clear()Storage
ReactiveUtils.exists(state)state.exists()Storage
ReactiveUtils.stopAutoSave(state)state.stopAutoSave()Storage
ReactiveUtils.startAutoSave(state)state.startAutoSave()Storage
ReactiveUtils.storageInfo(state)state.storageInfo()Storage

Error Handling

Every namespace method validates its arguments before calling the instance method. If the state doesn't have the required $ method, a console error is logged and a safe fallback is returned:

javascript
const plainObject = { count: 0 };  // NOT a reactive state

ReactiveUtils.save(plainObject);
// Console: [Namespace Methods] Invalid state or save not available
// Returns: false (no crash)

ReactiveUtils.cleanup(plainObject);
// Console: [Namespace Methods] Invalid state or cleanup not available
// Returns: undefined (no crash)

This makes namespace methods safe to call even if you're unsure whether a state has a particular feature enabled.


Key Takeaways

  1. 14 methods — 3 core, 4 async, 1 component, 7 storage (minus getRaw = 14 with it being the 15th, counted as part of core)
  2. Identical behavior — namespace methods are thin wrappers around $ methods
  3. Built-in validation — safe to call even on invalid states
  4. State is always the first argumentReactiveUtils.method(state, ...args)

What's next?

Let's see real-world usage patterns, where all methods are available, and the complete API reference.

Let's continue!