useQuery
Reactive data fetching hook
useQuery fetches records and re-renders when data changes.
Signature
useQuery<T>(
collectionName: string,
queryFn?: (q: QueryBuilder<T>) => QueryBuilder<T>,
deps?: unknown[],
): Array<Model<T> & T>
Basic usage
import { useQuery } from "ctrodb/react"
function TodoList() {
const todos = useQuery("todos")
return (
<ul>
{todos.map((todo) => (
<li key={todo.id}>{todo.title}</li>
))}
</ul>
)
}
With filters
function ActiveTodos() {
const todos = useQuery("todos", (q) =>
q.where("done", "==", false).sort({ createdAt: "desc" })
)
return <TodoList items={todos} />
}
With dynamic deps
function SearchResults({ query }: { query: string }) {
const results = useQuery(
"articles",
(q) => q.search("title", query),
[query],
)
return <ResultsList items={results} />
}
The deps array controls when the query function is re-evaluated.
How it works
- Runs the query on mount
- Subscribes to change events for the collection
- Re-runs the query on every change event
- Cleans up subscription on unmount
How is this guide?
Last updated on Jun 20, 2026