React에서 react-query refetch()사용하기.

Blackeichi·2022년 10월 9일
3

오늘도 새로운 에러가 발생하였다!😂

그것은 나의 앱이 url주소에서 쿼리스트링 값을 통해 API의 값을 가져오는데,

react-router-dom에서 같은 페이지로 인식을 해서 그런지, 뒤로가기나 앞으로 가기를 눌렀을 때, react-query가 새로운 값을 가져오지 않는 것이다.

처음에는 useEffect에 쿼리스트링 값이 변할 때, 새로고침하도록 시도하였으나, 새로고침이 한 번만 실행되지 않아, react-query의 refetch() 기능을 사용하였다.

코드는 다음과 같다.

const username = new URLSearchParams(location.search).get(
  "username"
) as string;
// URL에서 쿼리스트링 가져오기
const {
    data: userData,
    isLoading,
    refetch,
  } = useQuery<userInterface>(["userData"], () => getPuuid(server, username));

useEffect(() => {
  refetch();
}, [username]);
//쿼리스트링이 바뀔 때마다 useQuery refetch()작동

-----추가-----
하위 컴포넌트에서는 위와 같이 username(쿼리스트링)이 바뀔 때마다 refetch가 작동하지 않는다. (상위 컴포넌트에서 사용하면 중복이 안되나..?)
그러므로 상위컴포넌트에서 props로 받는 userData를 대신 사용하자

export const SummonerBot: React.FC<Ipuuid> = ({ userData }) => {
.....

const { data: matchData, refetch } = useQuery(["matchData"], () =>
    getMatchs(userData.puuid, Range)
);
 
useEffect(() => {
    refetch();
  }, [refetch, userData]);
profile
프론트엔드 주니어 개발자 한정우입니다. 😁

3개의 댓글

comment-user-thumbnail
2023년 5월 8일

감사합니다 덕분에 해결됐어요!

답글 달기
comment-user-thumbnail
2024년 1월 23일

queryKey: ["userData"] 여기에다가 userName 추가하면 간단히 해결되지 않나요?

1개의 답글