Skip to Content
Suspensive v3를 준비하고 있습니다. 🚀 더보기
문서보기@suspensive/react-queryuseSuspenseQuery

useSuspenseQuery

이 hook의 return 타입에는 isLoading, isError이 없습니다. <Suspense/><ErrorBoundary/>가 이 hook의 data를 보장해주기 때문입니다. 또한, 이 hook의 options에는 기본적으로 suspense가 true입니다. 필요한 새 options는 @tanstack/react-query의 useQuery처럼 사용하면 됩니다.

import { useSuspenseQuery } from '@suspensive/react-query' const Example = () => { const query = useSuspenseQuery({ queryKey, queryFn, }) // suspense: true가 기본입니다. // isSuccess으로 type narrowing이 필요하지 않습니다. query.data // TData }
import { useSuspenseQuery } from '@suspensive/react-query'
import { getPost } from './api'

export const Post = ({ postId }: { postId: number }) => {
  const { data } = useSuspenseQuery({
    queryKey: ['posts', postId],
    queryFn: () => getPost(postId),
  })

  return (
    <div>
      <h1>{data.title}</h1>
      <p>{data.body}</p>
    </div>
  )
}

동기

@tanstack/react-query에서 suspense 옵션을 사용하면, useQuery<Suspense/> and <ErrorBoundary/>와 함께 사용할 수 있습니다.

import { useQuery } from '@tanstack/react-query' const Example = () => { const query = useQuery({ queryKey, queryFn, suspense: true, }) query.data // TData | undefined if (query.isSuccess) { query.data // TData } }

useQuery의 return 타입(query.data)은 이 컴포넌트의 부모인 <Suspense/><ErrorBoundary/> 덕분에 항상 성공한 경우일 것입니다. 하지만 @tanstack/react-query는 타입스크립트 타입적으로 이것을 표현하지 않습니다.

이것이 @suspensive/react-query가 useSuspenseQuery를 제공하는 이유입니다.

💡

성공한 케이스에 집중하세요.

이제 우리는 컴포넌트 내부에서 fetching이 항상 성공하므로 성공한 경우에만 집중할 수 있습니다.

수정된 날짜: