개발자

리액트 쿼리 refetch vs invalidate

2022년 12월 21일조회 2,175

안녕하세요! 리액트 쿼리를 통해 페이지 네이션을 구현했습니다. 특정 페이지에서 데이터가 변경됐을 때 해당 페이지의 데이터를 다시 가져와서 페이지의 ui를 변경해주어야 합니다. 이때 refetch 또는 invalidate를 사용할 수 있는데 결과는 같은 것 같더라구요. 결과는 같지만 refetch와 invalidate의 동작이나 성능 또는 어떤 방면에서 차이가 있는지 문득 궁금해졌습니다! 혹시 데이터를 새로 가져올 때 어떤 함수를 쓰면 좋을까요? 답변을 통해 좋은 인사이트를 얻고 싶습니다! 감사합니다.

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

답변 1

성원님의 프로필 사진

안녕하세요 react-query에서 데이터를 새로 가져올 때 refetch와 invalidation은 다르게 동작합니다. refetch는 항상 데이터를 가져옵니다. 반면 invalidation은 쿼리를 stale하게 만듭니다. 쿼리가 stale 상태로 변경된다고 바로 데이터를 다시 가져오지 않습니다. 대략 다음과 같은 조건이 있습니다. 1. query instance가 마운트 될 때 (observer 생성) 2. 네트워크 재연결 3. 윈도우 다시 포커싱 4. refetch Interval로 인한 refetch 또한 위의 refetch 조건은 option을 통해 비활성화 될 수 있습니다. 따라서 항상 데이터를 가져와야 하는 경우가 아니라면 쓰임에 따라 invalidation을 사용하는게 미세하게나마 성능에 좋을 수 있습니다. 작성자님이 말씀해주신 페이지네이션 상황에서 얘기해보면 - 페이징 된 리스트 값에서 특정 페이지만 불러오고싶을 때는 둘 다 사용해도 괜찮을 것 같습니다. (해당 페이지 데이터의 상태 '변경') - 페이징 된 리스트 값이 '삭제'되어 모든 페이지의 구조가 변경되야 할 때는 refetch보다는 invalidation을 하는게 나을 것 같습니다. refetch는 모든 페이지의 데이터를 불러오지만 (키를 기준으로 inactive 한 데이터 까지 불러옴) invalidation은 우선 query를 stale하게만 만들기 때문에 active한 페이지의 데이터를 가져옵니다.

profile picture

익명

작성자

2022년 12월 26일

refetch와 invalidate의 동작에 대해 다시 생각해보게 되네요 감사합니다!

profile picture

익명

작성자

2023년 05월 18일

안녕하세요 성원님, 설명 감사합니다! 질문 작성자는 아니지만 답변이 도움되었습니다. 다만 제가 제대로 이해를 한건지 모르겠어서 한번 확인 부탁드려도 될까요? 맨 아래 문단에서 "refetch는 모든 페이지의 데이터를 불러오지만 (키를 기준으로 inactive 한 데이터 까지 불러옴) invalidation은 우선 query를 stale하게만 만들기 때문에 active한 페이지의 데이터를 가져옵니다." 이라고 하셨었는데요. 1. 'refetch를 하면 키를 기준으로 데이터를 다시 불러오기에 inactive하던 데이터까지 가져오게 된다'는 말씀이실까요? 2. invalidation 후에 쿼리가 stale 되었다가 추후 refetch 조건을 충족해 다시 fetch를 하게 되었을때 왜 active한 페이지의 데이터만 가져오나요? fetch를 하기에 그 데이터가 active해지는 것 아닌가요? 관련된 내용을 검색해도 모르겠어서... 답변 주시면 정말 감사하겠습니다!!

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

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

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

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