👀 Check out the changes in Suspensive v2 read more →
Documentation
@suspensive/react-query
useSuspenseQueries

useSuspenseQueries

There is no isLoading or isError in the return type of this hook. This is because <Suspense/> and <ErrorBoundary/> guarantee the data of this hook. Also, in the options of this hook, suspense is set to true by default. You can use @tanstack/react-query's useQueries (opens in a new tab) for the new options you need.

import { useSuspenseQueries } from '@suspensive/react-query'
 
const Example = () => {
  const [query1, query2] = useSuspenseQueries({
    queries: [
      { queryKey: [1], queryFn },
      { queryKey: [2], queryFn },
    ],
  }) // suspense: true is the default.
 
  // No type narrowing required with isSuccess.
  query1.data // TData
  query2.data // TData
}

Motivation

You can use useQueries (opens in a new tab) with <Suspense/> and <ErrorBoundary/> by using the suspense option of @tanstack/react-query useQueries.

import { useQueries } from '@tanstack/react-query'
 
const Example = () => {
  const [query1, query2] = useQueries({
    queries: [
      { queryKey: [1], queryFn, suspense: true },
      { queryKey: [2], queryFn, suspense: true },
    ],
  })
 
  query1.data // TData | undefined
  query2.data // TData | undefined
 
  if (query1.isSuccess) {
    query.data // TData
  }
  if (query2.isSuccess) {
    query.data // TData
  }
}

The return type of useQueries (query1.data, query2.data) will always be a success case thanks to this component's parents, <Suspense/> and <ErrorBoundary/>. But @tanstack/react-query doesn't express this typologically.

That's why @suspensive/react-query provides useSuspenseQueries.

💡

Focus on successful cases.

Now we can focus only on successful cases as fetching always succeeds inside our component.