개발자

React-query로 실시간 데이터 반영

2024년 05월 10일조회 202

리액트를 통해 버스 위치 데이터를 받아서 버스 위치를 실시간으로 보여주는 앱을 개발하고 있는데요, 리액트 쿼리를 활용해 10초마다 refetch하여 데이터를 업데이트하려고 하는데 계속 자동으로 캐싱되어 처음 가져온 데이터만 10초마다 가져오네요 ㅠ (개발자 도구에서 disable cache를 하면 잘 가져옴) 새로고침를 해도 마찬가지 입니다. const { data, isLoading, error, refetch } = useQuery(["busPos"], getData, { refetchIntervalInBackground: true, refetchInterval: 10000, cacheTime: 10000, }); 어떻게 하면 데이터를 잘 업데이트할 수 있을까요?? Open api 사용 중인데 요청 헤더에 캐시 컨트롤을 노 캐시로 하면 cors 에러가 뜹니다 ㅠ

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

답변 1

허니님의 프로필 사진

staleTime을 사용하세요

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

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

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 05월 10일

리액트 쿼리에서 갱신된 데이터를 불러오기 위해서는 몇 가지 방법이 있습니다. `refetchInterval` 옵션을 이용하는 것이 가장 우선적인 해결책입니다. `refetchInterval`은 작업(fetch)에 얼마나 자주 다시 요청할 지 설정합니다. 예: ```javascript useQuery('busLocation', fetchBusLocation, { refetchInterval: 5000 }) ``` 위와 같이 설정하면 매 5초마다 버스 위치 정보를 업데이트 합니다. 그런데 문제는 여전히 캐싱 때문에 계속 동일한 데이터만 반환한다면, API response 헤더가 아닌 React Query 설정에서 캐싱 전략을 변경해야 합니다. React Query에서 비활성화 시 자동으로 캐시 데이터를 제거하려면, `cacheTime` 옵션을 사용하여 이를 `0`으로 설정할 수 있습니다: ```javascript useQuery('busLocation', fetchBusLocation, { cacheTime: 0 }) ``` 그러나 이렇게 하면 앱 성능에 영향을 줄 수 있으므로 추천하지 않습니다. 대신 stale-time과 cache-time 전략에 대해 읽어보고 이해할 필요가 있습니다. 참고로 CORS 에러와 관련해서는 서버 단에서 해결해야 하며 클라이언트 코드(즉 리액트 코드)에서는 제어할 수 없는 문제입니다. 서버 설정 혹은 Open API 제공자에게 문의해야 합니다.

목록으로

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