Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

react useQueryClient

REACT, 20252 min read

배경

프론트팀에서 react-query 를 사용중이다 운영,staging 환경에서 react-query 를 통해 어떤 점이 개선되었고 상태 변화등 알 수 있는지 방법이 없을지 궁금했고 왜 react-query를 썼는지 뭐가 좋은 건지 알고 싶었다.. react-query 를 쓰면 Query 상태 변화 이벤트를 구독해서 로깅하거나 별도 처리도 가능하다고 해서 한번 기록해봅니다.

사용 예시

export interface QueryCacheNotifyEvent {
type: 'added' | 'removed' | 'updated' | 'observerAdded' | 'observerRemoved' | 'observerResultsUpdated';
query: Query<any, any, any, any>;
}
type 값의미
added새로운 Query가 추가됐을 때
removedQuery가 삭제됐을 때
updatedQuery 데이터가 변경됐을 때
observerAdded이 Query를 구독하는 컴포넌트(observer)가 추가됐을 때
observerRemovedobserver가 빠졌을 때
observerResultsUpdatedobserver가 보고 있는 결과가 업데이트됐을 때
import { useEffect } from 'react';
import { useQueryClient } from '@tanstack/react-query';
import type { QueryCacheNotifyEvent } from '@tanstack/react-query';
function QueryLogger() {
const queryClient = useQueryClient();
useEffect(() => {
const unsubscribe = queryClient.getQueryCache().subscribe((event: QueryCacheNotifyEvent) => {
console.log('Query event:', event);
if (event.type === 'updated' && event.query) {
const fetchStatus = event.query.state.fetchStatus;
const fetchTime = event.query.state.dataUpdatedAt;
const queryKey = event.query.queryKey;
// 여기서 원하는 로깅 서버로 POST 요청 보내기
// sendLogToServer({ fetchStatus, fetchTime, queryKey });
}
});
return () => {
unsubscribe();
};
}, [queryClient]);
return null;
}
export default QueryLogger;
© 2025 by GwiyeomGo Tech Blog. All rights reserved.