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