useQuery 에 매개변수로 넣어주는 options 객체의 enabled 와 refetchInterval 을 사용하시면 될 것 같습니다.
query 는 enabled 가 true 인 상황일 때 실행이 됩니다.
refetchInterval 로 주기적으로 패칭할 타임을 걸어주고, enabled 를 활용해 특정 상황에 콜을 멈추면 될 것 같습니다.
아래 예제 코드는 state 를 활용해 enabled 상태를 관리하고, timeout 되는 시점에 enabled 를 false 로 바꿔주어 콜을 그만하게 하는 예제입니다.
const [enabled, setEnabled] = useState(true);
const { data, isLoading } = useQuery<IList[], Error>(KEY_LIST, getList, {
refetchInterval: 500,
enabled,
});
useEffect(() => {
const timeout = setTimeout(() => {
setEnabled((prev) => !prev);
}, 5000);
return () => clearTimeout(timeout);
}, []);