개발자

ReactQuery 사용 중에 url이 변경되는 경우, 자동으로 리페칭되나요?

2023년 05월 23일조회 364

회사에서 react query를 도입하는 중입니다. 기존 코드에서는 서로 다른 페이지에서 같은 api를 지속적으로 요청하여 데이터를 받아오고 있습니다. 받아오는 데이터가 변경이 거의 없는 데이터라서, react-query의 캐싱기능을 사용하여, 불필요한 api 요청을 방지하려고 했습니다. 그런데 개발자 도구 네트워크탭에서 확인해보니, 페이지 url 경로가 변경될 때마다, 데이터가 fresh 상태임에도 불구하고 계속하여 데이터를 요청하는 api를 보내고 있습니다. staleTime도 60분으로 설정했고, 데이터가 fresh 상태임도 확인해보았습니다. 혹시 옵션값과는 상관없이, url이 변경되었을 경우(ex localhost:3000/main -> /setting) 데이터 리페칭이 자동으로 일어나는 건가요? url이 변경되었을 때, 데이터가 fresh 상태라면 리페칭을 하지 않게 하고 싶습니다.

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

답변 1

김하림님의 프로필 사진

URL 경로가 변경될 때마다 데이터를 리페칭하는 문제는 refetchOnMount 옵션과는 관련이 없습니다. React Query는 기본적으로 쿼리 키를 기준으로 캐싱하고 관리하는데, URL 경로의 변경은 쿼리 키에 영향을 주지 않아요. 따라서 URL 경로가 변경되더라도 캐시된 데이터가 있는 경우에는 서버에 요청하지 않고 캐시된 데이터를 사용해야 합니다. 개발자 도구의 React Dev Tools 혹은 Profiler를 통해서 컴포넌트가 리렌더링되고 있는지 한 번 확인해보세요. URL 변경 시 HOC에서 렌더링이 일어나는지 확인해보셔야 할 거 같고, 혹은 URL이 변경될 때 해당 쿼리의 쿼리 키에 정의된 값(아마도 상태값)이 변경되는지도 확인해 보셔야 할 거 같습니다.

리오님의 프로필 사진

리오

작성자

SW 개발자2023년 05월 26일

답변 감사합니다! 알려주신 내용을 바탕으로 원인을 분석해 볼 수 있었습니다. 근데 어리석게도, 제가 Query Client 생성을 App 컴포넌트 내부에서 해가지고, 여러 페이지 컴포넌트들 사이에서 데이터 공유가 안되고 있었던 것이었습니다. ㅠㅠ "const queryClient = new QueryClient(); "를 App 바깥에 전역으로 선언했더니 정상적으로 작동됩니다.

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

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

또는

이미 회원이신가요?

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

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

새로운 질문 올리기

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