인프런 커뮤니티 질문&답변

강주호님의 프로필 이미지

작성한 질문수

Next + React Query로 SNS 서비스 만들기

useMutation 사용하기

데이터 리페칭 질문이 있습니다.

해결된 질문

24.05.20 13:34 작성

·

155

0

안녕하세요 제로초님 강의를 듣던 중 궁금한 것이 있어서 여쭈어 봅니다.

 

강의에서는 데이터를 mutation으로 리페칭 후

if (queryClient.getQueryData(["posts", "recommends"])) {
        queryClient.setQueryData(
          ["posts", "recommends"],
          (prevData: { pages: Post[][] }) => {
            const shallow = {
              ...prevData,
              pages: [...prevData.pages],
            };
            shallow.pages[0] = [...shallow.pages[0]];
            shallow.pages[0].unshift(newPost);
            return shallow;
          }
        );
      }

이런 식으로 데이터를 업데이트 해주었는데, 이 부분을 아래와 같이

queryClient.invalidateQueries({ queryKey: ["posts", "recommends"] });


이런 식으로 업데이트를 하면 어떤 차이점이 있나요 ??

데이터 업데이트시 쿼리를 업데이트 하고 리페칭하는 동작은 같은 것 같은데, 강의에서와 같이 복잡한 데이터 구조를 복사 해가며 구현하는 이유가 궁금합니다.
성능상의 차이가 있는 것인가요 ??

 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 05. 20. 13:59

invalidateQueries를 하면 데이터 전체를 새로 가져오는 것이고,

setQueryData 방식으로 하면 데이터 하나를 나머지 캐시에 있는 데이터들에 끼워넣는 것입니다.

invalidateQueries가 당연히 데이터 낭비이죠.