Skip to content

Replacement-Based State

Problem

A feature needs one object value with explicit replacement operations while derived consumers should react to individual property reads.

Solution

Create a signal, return replacement objects from update(), and derive the selected property through computed().

ts
import { createRipple } from '@vielzeug/ripple';

const ripple = createRipple();
const user = ripple.signal({ name: 'Ada', visits: 0 });
const visits = ripple.computed(() => user.value.visits);

user.update((value) => ({ ...value, visits: value.visits + 1 }));
user.value = { name: 'Grace', visits: 5 };

console.log(visits.value);
ripple.dispose();

Pitfalls

  • Replace nested objects instead of mutating them in place.
  • Do not use signals as a deep-mutation proxy.
  • Use computed values for selected derived reads.