🔥 기본 쿼리 함수
281자
4분
TanStack Query를 사용하면서 전체 앱에서 동일한 쿼리 함수를 공유하고 단순히 쿼리 키로 가져올 데이터를 식별하고 싶다면, TanStack Query에 기본 쿼리 함수를 제공하여 이를 구현할 수 있습니다.
다음은 기본 쿼리 함수를 설정하고 사용하는 방법을 보여주는 예제입니다:
// 쿼리 키를 받아 처리하는 기본 쿼리 함수를 정의합니다 const defaultQueryFn = async ({ queryKey }) => { const { data } = await axios.get( `https://jsonplaceholder.typicode.com${queryKey[0]}`, ) return data } // QueryClient를 생성하고 defaultOptions를 통해 기본 쿼리 함수를 앱에 제공합니다 const queryClient = new QueryClient({ defaultOptions: { queries: { queryFn: defaultQueryFn, }, }, }) function App() { return ( <QueryClientProvider client={queryClient}> <YourApp /> </QueryClientProvider> ) } // 이제 쿼리 키만 전달하면 됩니다! function Posts() { const { status, data, error, isFetching } = useQuery({ queryKey: ['/posts'] }) // ... } // 쿼리 함수를 생략하고 바로 옵션을 설정할 수도 있습니다 function Post({ postId }) { const { status, data, error, isFetching } = useQuery({ queryKey: [`/posts/${postId}`], enabled: !!postId, }) // ... }
typescript
이 예제에서는 defaultQueryFn
이라는 기본 쿼리 함수를 정의했습니다. 이 함수는 쿼리 키를 받아 해당 키를 URL의 일부로 사용하여 데이터를 가져옵니다. 그런 다음 QueryClient
를 생성할 때 defaultOptions
를 통해 이 함수를 기본 쿼리 함수로 설정합니다.
이렇게 설정하면 개별 쿼리에서 매번 쿼리 함수를 정의할 필요 없이 쿼리 키만 전달하면 됩니다. Posts
컴포넌트에서 볼 수 있듯이, useQuery
훅에 쿼리 키만 전달하여 데이터를 가져올 수 있습니다.
더 나아가 Post
컴포넌트 예제처럼 쿼리 함수를 완전히 생략하고 바로 다른 옵션을 설정할 수도 있습니다. 여기서는 enabled
옵션을 사용하여 postId
가 존재할 때만 쿼리를 실행하도록 설정했습니다.
물론 특정 쿼리에서 기본 쿼리 함수를 사용하지 않고 싶다면, 언제든 원하는 쿼리 함수를 직접 제공하여 기본값을 재정의할 수 있습니다. 이렇게 하면 대부분의 경우 기본 쿼리 함수의 편리함을 누리면서도, 필요할 때 유연하게 커스텀 로직을 적용할 수 있습니다.