Skip to content

Reactive tables ​

Problem ​

Render a table whenever its data changes without polling.

Solution ​

Subscribe to the table, then stop the subscription when its owner ends.

ts
import { table } from '@vielzeug/vault';
import { createMemory } from '@vielzeug/vault/memory';

const store = createMemory({ schema: { users: table<{ id: number; name: string }>('id') } });
const stop = store.observe('users', (users) => console.log(users));
await store.put('users', { id: 1, name: 'Ada' });
stop();

Pass { immediate: false } when only later mutations matter, or pass an AbortSignal to let another lifecycle own the subscription.

Pitfalls ​

observe() replaces the removed watch, observeMany, constructor signal, and stream APIs. Observe each table explicitly when a view needs several snapshots.