개발자
react-query useQuery 관련 질문이 있습니다. 특정 조건에 걸릴때까지 주기적으로 요청을 해야하는데, refetchInterval을 어떻게 사용해야할지 잘모르겠습니다. 혹시 아시는분 계실까요?
답변 2
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
익명
작성자
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); }, []);
익명
작성자
2023년 02월 22일
오호, 이런 방법도 있군요. 혹시 refetchInterval에 함수를 줘서 요청 주기를 바꾸는 것과 enabled 값을 위 예시처럼 useEffect로 바꿔주는것에 차이가 있나요?
강동희
프론트엔드 개발자 • 2023년 02월 22일
예제에 useEffect에 들어간 이유는 timeout 을 걸어줘서 enabled 값을 바꿔주기 위해서 사용한 겁니다. 실제 프로젝트에서는 enabled 값이 바뀌는 조건이 있으니 useEffect는 사용하지 않구요, react-query 에서는 쿼리를 조건부로 사용하고 싶을때 enabled 옵션을 사용하라고 하고 있습니다. refetchInterval에 함수를 넣어주는건 리턴되는 값으로 false(refetch 하지 않기) 혹은 초(해당 간격 리패치) 를 옵션으로 주는거지 별 다른 차이는 없어보입니다. 만약 해당 쿼리가 특정 조건에서 비활성화 (더 이상 패칭되지 않아야한다면) enabled 를 주시고, 쿼리는 계속 활성화 되어있지만 리패칭이 안되길 원한다면 함수로 return 되는 값을 분기해서 주세요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!