Next.js 프로젝트에서 @tanstack/react-query
v5 사용 시 다양한 타입 에러 발생.
내가 FE개발을 담당 하진 않았지만, 고도화 하고 싶은 부분을 수정하다 생긴 에러 정리.
// ❌ 에러 코드
export const useGetSubscriptionDetail = (id?: number) =>
useQuery(
[GET_subscription_detail.name, id], // 첫 번째 인수로 queryKey 전달
{
enabled: !!id,
queryFn: () => GET_subscription_detail(id!),
select: (res) => res.data,
}
)
에러 메시지:
이 호출과 일치하는 오버로드가 없습니다.
'queryKey' 속성이 '(string | number | undefined)[]' 형식에 없지만
'UseQueryOptions<...>' 형식에서 필수입니다.
// ❌ 에러 코드
select: (res) => res.data
에러 메시지:
'(res: ApiResponse<SubscriptionDetailDto>) => { data: SubscriptionDetailDto; status: string; }'
형식은 '(data: ApiResponse<SubscriptionDetailDto>) => SubscriptionDetailDto' 형식에 할당할 수 없습니다.
// ❌ 에러 코드
const { data: popularSubId } = useGetPopularSubscription();
const { data: subDetail } = useGetSubscriptionDetail(popularSubId);
에러 메시지:
'{ data: number; status: string; } | undefined' 형식의 인수는
'number | undefined' 형식의 매개 변수에 할당될 수 없습니다.
// ❌ 에러 코드
const { data: getInfra } = useGetInfraBySubscription(popularSubId);
에러 메시지:
'number | undefined' 형식의 인수는 'string' 형식의 매개 변수에 할당될 수 없습니다.
useQuery(queryKey, options)
형태useQuery({ queryKey, ...options })
형태로 통합{ data: T, status: string }
구조.data
속성으로 실제 데이터에 접근해야 함string
타입을 요구하지만 number
를 전달// ✅ 해결된 코드
export const useGetSubscriptionDetail = (id?: number) =>
useQuery({
queryKey: [GET_subscription_detail.name, id], // options 객체 내부로 이동
enabled: !!id,
queryFn: () => GET_subscription_detail(id!),
select: (res: ApiResponse<SubscriptionDetailDto>) => res.data,
})
// ✅ 해결된 코드
const { data: popularSubRes } = useGetPopularSubscription();
const popularSubId = popularSubRes?.data; // .data로 실제 값 추출
const { data: subDetailRes } = useGetSubscriptionDetail(popularSubId);
const subDetail = subDetailRes?.data; // .data로 실제 객체 추출
// ✅ 해결된 코드
const idString = popularSubId ? String(popularSubId) : '';
const { data: getInfra } = useGetInfraBySubscription(idString);
?.
) 적극 활용