개발자

리액트 쿼리 useQuery에서 데이터가 잘못 나오는 부분

2024년 01월 04일조회 107

하나의 컴포넌트에서 두개의 useQuery를 사용중입니다. 각각의 useQuery는 다른 쿼리키를 갖고 있으며 하나는 상품정보, 하나는 카테고리 정보를 불러옵니다. 그런데 '간혹' 상품정보 쿼리에서 카테고리 정보를 불러올때가 있습니다. 코드를 일부 보여드리겠습니다. // 상품정보 불러오는 코드(커스텀 훅) export default function useGetProduct(productId: number) { return useQuery(["getProduct", productId], () => getProduct(productId), { onError: (err) => alert(err), }); } // 카테고리 정보 불러오는 코드(커스텀 훅) export default function useGetCountByCategory() { return useQuery(["getCountByCategory"], getCountByCategory, { select: (res) => res.result.productCountsByCategory, }); } 두 코드에서 쿼리키가 완전 다르다고 생각합니다. 그런데 에러가 나서 네트워크 탭을 보면 상품정보 request의 response에 카테고리 정보 response가 담겨옵니다(백엔드 쪽은 스웨거를 통해 여러번 시도했는데 동일하게 데이터가 오고 있구요). 어떤 부분이 문제일까요!? 리액트 쿼리가 아주 애를 먹이네요..! 지식을 나눠주신다면 감사하겠습니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

백승훈님의 프로필 사진

React-Query Dev-tool를 사용하여 특정 상황에서 어떤 쿼리키가 갱신되고 활성화되는지 확인 해 보시는게 좋을 것 같습니다. 혹은 리액트 쿼리 버전이 최신이라면 문법이 최근 조금 변경되었습니다. useQuery({ queryKey: ['todos'], queryFn: getTodos }) 다음과 같이 queryKey 혹은 queryFn을 넣어주셔야 정상 동작합니다. 혹은 queryClient를 다시 생성하지 않는지 확인 해 보시는것도 좋을 것 같습니다. app.js 의 최상단에서 const queryClient = new QueryClient() 쿼리클라이언트는 한번만 new로 생성되어야 하며 이후 재사용 시에는 const queryClient = useQueryClient() 다음과 같은 문법을 통해 불러와야 합니다. new로 다시 생성하는 부분이 있으면 변경해주셔야 합니다. 👍

김선진님의 프로필 사진

김선진

작성자

소프트웨어 엔지니어2024년 01월 04일

길고 정성스러운 답변 감사합니다. 커리어리에 친절한 분들이 많은 것 같아요:) queryClient 내용은 몰랐는데 배웠습니다. 리액트 쿼리 버전은 예전 버전이고, 현재 쿼리는 정상 작동하는데 여기 ai봇이 답변해준 내용을 바탕으로 해결했습니다. (ai봇 답변 : useQuery는 axios 요청과 같은 프로미스 기반의 비동기 작업을 다룹니다. 이 때문에 여러 요청이 거의 동시에 실행되고 결과는 각각의 속도에 따라 도착할 수 있습니다. 따라서 '간혹' 잘못된 데이터가 나오는 경우, 네트워크 지연 등으로 인해 요청 순서나 완료 순서가 교차하여 생길 수 있는 이슈일 수 있습니다.) 즉, 두번째 쿼리에서 enabled 속성을 추가해서(enabled: 첫번째 쿼리 결괏값) 해결했습니다. 승훈님 말씀대로 개발시 React-Query Dev-tool도 활용하겠습니다. 감사합니다~!!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!