개발자

refetchInterval을 사용해서 특정 조건 달성 시 useQuery를 멈추는 방법

2023년 02월 20일조회 987

react-query useQuery 관련 질문이 있습니다. 특정 조건에 걸릴때까지 주기적으로 요청을 해야하는데, refetchInterval을 어떻게 사용해야할지 잘모르겠습니다. 혹시 아시는분 계실까요?

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

답변 2

hvp님의 프로필 사진

refetchInterval 값을 관리하는 state를 하나 만드는게 가장 적절해 보입니다. 혹은 버전에 따라 다르겠지만 단순히 bookingStatus(fetch해온 데이터)와 관련있는 조건이라면 바로 function을 넣어줄 수도 있을 것 같습니다. https://stackoverflow.com/questions/66263924/how-can-i-stop-a-react-query-usequery-running-on-a-refetchinterval-when-a-condit

profile picture

익명

작성자

2023년 02월 22일

오 함수를 넣어줄 수 있군요. 딱 제가 찾고 있던건데 감사합니다!

강동희님의 프로필 사진

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); }, []);

profile picture

익명

작성자

2023년 02월 22일

오호, 이런 방법도 있군요. 혹시 refetchInterval에 함수를 줘서 요청 주기를 바꾸는 것과 enabled 값을 위 예시처럼 useEffect로 바꿔주는것에 차이가 있나요?

강동희님의 프로필 사진

강동희

프론트엔드 개발자2023년 02월 22일

예제에 useEffect에 들어간 이유는 timeout 을 걸어줘서 enabled 값을 바꿔주기 위해서 사용한 겁니다. 실제 프로젝트에서는 enabled 값이 바뀌는 조건이 있으니 useEffect는 사용하지 않구요, react-query 에서는 쿼리를 조건부로 사용하고 싶을때 enabled 옵션을 사용하라고 하고 있습니다. refetchInterval에 함수를 넣어주는건 리턴되는 값으로 false(refetch 하지 않기) 혹은 초(해당 간격 리패치) 를 옵션으로 주는거지 별 다른 차이는 없어보입니다. 만약 해당 쿼리가 특정 조건에서 비활성화 (더 이상 패칭되지 않아야한다면) enabled 를 주시고, 쿼리는 계속 활성화 되어있지만 리패칭이 안되길 원한다면 함수로 return 되는 값을 분기해서 주세요.

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

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

또는

이미 회원이신가요?

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

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

새로운 질문 올리기

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