- Core API Reference
- Collection
- createCollection
- liveQueryCollectionOptions
- createLiveQueryCollection
- createOptimisticAction
- createTransaction
- Electric DB Collection
- electricCollectionOptions
- Query DB Collection
- queryCollectionOptions
- RxDB DB Collection
- rxdbCollectionOptions
- PowerSync Collection
- powerSyncCollectionOptions
- createIndexedDB
- indexedDBCollectionOptions
- Vue Composables
- useLiveQuery
- UseLiveQueryReturn
- UseLiveQueryReturnWithCollection
useLiveQuery
Call Signature#
function useLiveQuery<TContext>(queryFn, deps?): UseLiveQueryReturn<TContext>;Defined in: useLiveQuery.ts:176
Create a live query using a query function
Type Parameters#
TContext#
TContext extends Context
Parameters#
queryFn#
(q) => QueryBuilder<TContext>
Query function that defines what data to fetch
deps?#
unknown[]
Array of reactive dependencies that trigger query re-execution when changed
Returns#
UseLiveQueryReturn<TContext>
Reactive object with query data, state, and status information
Examples#
// Basic query with object syntax
const { data, isLoading } = useLiveQuery((q) =>
q.from({ todos: todosCollection })
.where(({ todos }) => eq(todos.completed, false))
.select(({ todos }) => ({ id: todos.id, text: todos.text }))
)// With reactive dependencies
const minPriority = ref(5)
const { data, state } = useLiveQuery(
(q) => q.from({ todos: todosCollection })
.where(({ todos }) => gt(todos.priority, minPriority.value)),
[minPriority] // Re-run when minPriority changes
)// Join pattern
const { data } = useLiveQuery((q) =>
q.from({ issues: issueCollection })
.join({ persons: personCollection }, ({ issues, persons }) =>
eq(issues.userId, persons.id)
)
.select(({ issues, persons }) => ({
id: issues.id,
title: issues.title,
userName: persons.name
}))
)// Handle loading and error states in template
const { data, isLoading, isError, status } = useLiveQuery((q) =>
q.from({ todos: todoCollection })
)
// In template:
// <div v-if="isLoading">Loading...</div>
// <div v-else-if="isError">Error: {{ status }}</div>
// <ul v-else>
// <li v-for="todo in data" :key="todo.id">{{ todo.text }}</li>
// </ul>Call Signature#
function useLiveQuery<TContext>(queryFn, deps?): ConditionalUseLiveQueryReturn<TContext>;Defined in: useLiveQuery.ts:182
Create a live query using a query function
Type Parameters#
TContext#
TContext extends Context
Parameters#
queryFn#
(q) => QueryBuilder<TContext> | null | undefined
Query function that defines what data to fetch
deps?#
unknown[]
Array of reactive dependencies that trigger query re-execution when changed
Returns#
ConditionalUseLiveQueryReturn<TContext>
Reactive object with query data, state, and status information
Examples#
// Basic query with object syntax
const { data, isLoading } = useLiveQuery((q) =>
q.from({ todos: todosCollection })
.where(({ todos }) => eq(todos.completed, false))
.select(({ todos }) => ({ id: todos.id, text: todos.text }))
)// With reactive dependencies
const minPriority = ref(5)
const { data, state } = useLiveQuery(
(q) => q.from({ todos: todosCollection })
.where(({ todos }) => gt(todos.priority, minPriority.value)),
[minPriority] // Re-run when minPriority changes
)// Join pattern
const { data } = useLiveQuery((q) =>
q.from({ issues: issueCollection })
.join({ persons: personCollection }, ({ issues, persons }) =>
eq(issues.userId, persons.id)
)
.select(({ issues, persons }) => ({
id: issues.id,
title: issues.title,
userName: persons.name
}))
)// Handle loading and error states in template
const { data, isLoading, isError, status } = useLiveQuery((q) =>
q.from({ todos: todoCollection })
)
// In template:
// <div v-if="isLoading">Loading...</div>
// <div v-else-if="isError">Error: {{ status }}</div>
// <ul v-else>
// <li v-for="todo in data" :key="todo.id">{{ todo.text }}</li>
// </ul>Call Signature#
function useLiveQuery<TContext>(config, deps?): UseLiveQueryReturn<TContext>;Defined in: useLiveQuery.ts:222
Create a live query using configuration object
Type Parameters#
TContext#
TContext extends Context
Parameters#
config#
LiveQueryCollectionConfig<TContext>
Configuration object with query and options
deps?#
unknown[]
Array of reactive dependencies that trigger query re-execution when changed
Returns#
UseLiveQueryReturn<TContext>
Reactive object with query data, state, and status information
Examples#
// Basic config object usage
const { data, status } = useLiveQuery({
query: (q) => q.from({ todos: todosCollection }),
gcTime: 60000
})// With reactive dependencies
const filter = ref('active')
const { data, isReady } = useLiveQuery({
query: (q) => q.from({ todos: todosCollection })
.where(({ todos }) => eq(todos.status, filter.value))
}, [filter])// Handle all states uniformly
const { data, isLoading, isReady, isError } = useLiveQuery({
query: (q) => q.from({ items: itemCollection })
})
// In template:
// <div v-if="isLoading">Loading...</div>
// <div v-else-if="isError">Something went wrong</div>
// <div v-else-if="!isReady">Preparing...</div>
// <div v-else>{{ data.length }} items loaded</div>Call Signature#
function useLiveQuery<TResult, TKey, TUtils>(liveQueryCollection): UseLiveQueryReturnWithCollection<TResult, TKey, TUtils>;Defined in: useLiveQuery.ts:267
Subscribe to an existing query collection (can be reactive)
Type Parameters#
TResult#
TResult extends object
TKey#
TKey extends string | number
TUtils#
TUtils extends Record<string, any>
Parameters#
liveQueryCollection#
MaybeRefOrGetter<Collection<TResult, TKey, TUtils, StandardSchemaV1<unknown, unknown>, TResult> & NonSingleResult>
Pre-created query collection to subscribe to (can be a ref)
Returns#
UseLiveQueryReturnWithCollection<TResult, TKey, TUtils>
Reactive object with query data, state, and status information
Examples#
// Using pre-created query collection
const myLiveQuery = createLiveQueryCollection((q) =>
q.from({ todos: todosCollection }).where(({ todos }) => eq(todos.active, true))
)
const { data, collection } = useLiveQuery(myLiveQuery)// Reactive query collection reference
const selectedQuery = ref(todosQuery)
const { data, collection } = useLiveQuery(selectedQuery)
// Switch queries reactively
selectedQuery.value = archiveQuery// Access query collection methods directly
const { data, collection, isReady } = useLiveQuery(existingQuery)
// Use underlying collection for mutations
const handleToggle = (id) => {
collection.value.update(id, draft => { draft.completed = !draft.completed })
}// Handle states consistently
const { data, isLoading, isError } = useLiveQuery(sharedQuery)
// In template:
// <div v-if="isLoading">Loading...</div>
// <div v-else-if="isError">Error loading data</div>
// <div v-else>
// <Item v-for="item in data" :key="item.id" v-bind="item" />
// </div>Call Signature#
function useLiveQuery<TResult, TKey, TUtils>(liveQueryCollection): UseLiveQueryReturnWithSingleResultCollection<TResult, TKey, TUtils>;Defined in: useLiveQuery.ts:278
Create a live query using a query function
Type Parameters#
TResult#
TResult extends object
TKey#
TKey extends string | number
TUtils#
TUtils extends Record<string, any>
Parameters#
liveQueryCollection#
MaybeRefOrGetter<Collection<TResult, TKey, TUtils, StandardSchemaV1<unknown, unknown>, TResult> & SingleResult>
Returns#
UseLiveQueryReturnWithSingleResultCollection<TResult, TKey, TUtils>
Reactive object with query data, state, and status information
Examples#
// Basic query with object syntax
const { data, isLoading } = useLiveQuery((q) =>
q.from({ todos: todosCollection })
.where(({ todos }) => eq(todos.completed, false))
.select(({ todos }) => ({ id: todos.id, text: todos.text }))
)// With reactive dependencies
const minPriority = ref(5)
const { data, state } = useLiveQuery(
(q) => q.from({ todos: todosCollection })
.where(({ todos }) => gt(todos.priority, minPriority.value)),
[minPriority] // Re-run when minPriority changes
)// Join pattern
const { data } = useLiveQuery((q) =>
q.from({ issues: issueCollection })
.join({ persons: personCollection }, ({ issues, persons }) =>
eq(issues.userId, persons.id)
)
.select(({ issues, persons }) => ({
id: issues.id,
title: issues.title,
userName: persons.name
}))
)// Handle loading and error states in template
const { data, isLoading, isError, status } = useLiveQuery((q) =>
q.from({ todos: todoCollection })
)
// In template:
// <div v-if="isLoading">Loading...</div>
// <div v-else-if="isError">Error: {{ status }}</div>
// <ul v-else>
// <li v-for="todo in data" :key="todo.id">{{ todo.text }}</li>
// </ul>