Skip to content

computed

computed<TResult>(fn, options?): LiveQueryDef<TResult>

Defined in: packages/@livestore/livestore/src/live-queries/computed.ts:60

Creates a derived query that computes a value from other queries or signals.

Computed queries are memoized—they only re-evaluate when their dependencies change, and if the new result equals the previous result, downstream dependents won’t re-run. Use them for expensive calculations, aggregations, or transformations.

The get function inside computed establishes reactive dependencies automatically. When any dependency updates, the computed re-evaluates.

TResult

(get) => TResult

Pure function that computes the result. Use get() to read dependencies.

DepKey

Explicit dependency keys (required on Expo/React Native where fn.toString() returns [native code])

string

Human-readable label for debugging and devtools

LiveQueryDef<TResult>

A query definition usable with store.query(), store.subscribe(), and as a dependency in other queries

// Derive a count from a database query
const todos$ = queryDb(tables.todos.all())
const todoCount$ = computed((get) => get(todos$).length, { label: 'todoCount' })
// Use in a component
const count = store.query(todoCount$) // 5
// Combine multiple queries into derived stats
const stats$ = computed((get) => {
const todos = get(todos$)
const completed = todos.filter((t) => t.completed).length
return {
total: todos.length,
completed,
remaining: todos.length - completed,
percentComplete: todos.length > 0 ? (completed / todos.length) * 100 : 0,
}
}, { label: 'todoStats' })
// Chain computed queries
const hasCompletedTodos$ = computed(
(get) => get(stats$).completed > 0,
{ label: 'hasCompletedTodos' }
)