Skip to main content
The QueriesObserver allows you to observe multiple queries at once. It powers hooks like useQueries, enabling you to run multiple queries in parallel and get their combined results.

Constructor

Creates a new QueriesObserver instance.
QueryClient
required
The QueryClient instance to use.
Array<QueryObserverOptions>
required
Array of query options for each query to observe.
QueriesObserverOptions
Options for combining results.

Example

Methods

subscribe

Subscribes to all queries and receives updates when any query state changes.
(results: Array<QueryObserverResult>) => void
required
Function called when any query result changes. Receives an array of all query results.
function
Returns an unsubscribe function.

Example

setQueries

Updates the queries being observed.
Array<QueryObserverOptions>
required
New array of query options.
QueriesObserverOptions
Updated options for combining results.

Example

getCurrentResult

Returns the current results for all queries.
Array
Returns an array of query results, one for each query.

Example

getQueries

Returns the Query instances being observed.
Array
Returns an array of Query instances.

getObservers

Returns the QueryObserver instances managing each query.
Array
Returns an array of QueryObserver instances.

getOptimisticResult

Computes an optimistic result for the given queries without subscribing.
Array<QueryObserverOptions>
required
Array of query options.
(results: Array<QueryObserverResult>) => TCombinedResult
Function to combine the results.
[Array<QueryObserverResult>, Function, Function]
Returns a tuple with:
  1. Raw results array
  2. Function to combine results
  3. Function to track results

destroy

Destroys the observer and all child observers.

Example

Combining Results

You can use the combine option to transform the array of results into a single value:

Usage Example

Here’s a complete example:

Dynamic Queries

QueriesObserver efficiently handles dynamic query lists:
The observer will:
  • Reuse existing QueryObserver instances for queries that haven’t changed
  • Create new QueryObserver instances for new queries
  • Destroy QueryObserver instances for removed queries
  • Only notify listeners if the results actually changed

Performance

QueriesObserver is optimized for performance:
  1. Efficient Updates: Only creates/destroys observers when queries change
  2. Selective Notifications: Only notifies listeners when results change
  3. Result Memoization: Memoizes combined results to avoid unnecessary recalculations
  4. Property Tracking: Tracks which properties are accessed to minimize re-renders

Warnings

QueriesObserver will warn you if you have duplicate queries (queries with the same queryHash). This might lead to unexpected behavior.