yeahzzz
archive
yeahzzz
전체 방문자
오늘
어제
  • 분류 전체보기 (164)
    • Language (41)
      • Python (12)
      • JAVA (21)
      • C&C++ (8)
    • Algorithms (25)
      • programmers (9)
      • study log (16)
    • Problems & Solutions (14)
    • Major (29)
      • Data Structure & Algorithm (14)
      • Linux(Ubuntu) (9)
      • Security (2)
      • Linear Algebra (4)
    • FE (44)
      • Web(HTML5, CSS, JS) (5)
      • React & TS (26)
      • 코딩일기 (10)
    • BE (1)
      • Node.js (1)
    • Pytorch (8)
    • Server (2)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yeahzzz

archive

FE/React & TS

[TS] useQuery 커스텀 훅 사용하기

2024. 7. 21. 18:48

❓UseQueryOptions

UseQueryOptions는 react-query의 useQuery 훅에서 쿼리의 동작을 제어하는 옵션을 정의하는 타입이다.

이 타입을 사용하여 쿼리의 캐싱, 데이터 재검증, 에러 핸들링, 리트라이 로직 등 다양한 동작을 설정할 수 있다.

 

UseQueryOptions 타입을 사용할 때 react-query에서 총 네 가지 타입 인수를 받는다.

  1. TData: 쿼리에서 반환되는 데이터 타입
  2. TError: 쿼리에서 반환되는 에러 타입
  3. TResult: select 함수를 사용한 후의 데이터 타입 (기본적으로 TData와 동일함)
  4. TQueryKey: 쿼리 키의 타입
export const useProductDetailsQuery = (
  productId: number,
  options?: UseQueryOptions<ProductDetailsData>, //경우에 따라 AxiosError도 추가하자.
): UseQueryResult<ProductDetailsData> => {
  return useQuery({
    queryKey: queryKeys.detailsByProductId(productId),
    queryFn: () => getProductDetails(productId),
    ...options,
  });
};

❗참고) 리액트쿼리 v5에서는 useQuery에서 options 대신 …options를 사용해도록 바뀌었다. 참고

 

나는 여러 쿼리 키를 사용할 예정이라서 queryKeys 함수를 별도로 작성해주었다.

export const queryKeys = {
  detailsByProductId: (productId: number) => ['productDetails', productId],
};

사용 예제

const { data, isLoading } = useProductDetailsQuery(productId);
const { data, isLoading } = useProductDetailsQuery(productId, {
  queryKey: queryKeys.detailsByProductId(productId),
  staleTime: 6000,
});
옵션을 지정해줄 때 queryKey가 없다는 에러가 계속 떴다.
useProductDetailsQuery에서 queryKey를 정의해주거나, UseQueryOptions의 타입에서 Omit 메서드로 queryKey를 삭제해주니 잘 작동되었다.
저작자표시

'FE > React & TS' 카테고리의 다른 글

[react-Query] useMutation 사용해서 데이터 변경과 예외처리 하기  (0) 2024.08.02
[TS] onSubmit와 formData를 사용하여 form 유효성 검사하기  (0) 2024.07.18
[TS] useInfiniteQuery와 useInView 훅으로 무한스크롤 구현하기  (0) 2024.07.14
[TS] React Query와 Suspense, ErrorBoundary 함께 사용하기  (0) 2024.07.14
프론트엔드에서 효과적으로 비동기 처리하기(feat. TanStack Query & Suspense)  (0) 2024.07.13
    'FE/React & TS' 카테고리의 다른 글
    • [react-Query] useMutation 사용해서 데이터 변경과 예외처리 하기
    • [TS] onSubmit와 formData를 사용하여 form 유효성 검사하기
    • [TS] useInfiniteQuery와 useInView 훅으로 무한스크롤 구현하기
    • [TS] React Query와 Suspense, ErrorBoundary 함께 사용하기
    yeahzzz
    yeahzzz

    티스토리툴바