[TanStakQuery] 중요한 기본값(Important Defaults)

Jeris·2023년 5월 21일
0

기본적으로 TanStack Query는 공격적이지만 정상적인 기본값으로 구성됩니다. 때로는 이러한 기본값이 신규 사용자를 당황하게 하거나 사용자가 알지 못하는 경우 학습/디버깅을 어렵게 만들 수 있습니다. TanStack Query를 계속 학습하고 사용하면서 이러한 기본값을 염두에 두시기 바랍니다:

  • useQuery, useInfiniteQuery를 통한 쿼리 인스턴스는 기본적으로 캐시된 데이터를 오래된 데이터로 간주합니다.

"이 동작을 변경하려면 staleTime 옵션을 사용하여 전역 및 쿼리별로 쿼리를 구성할 수 있습니다. staleTime을 길게 지정하면 쿼리가 데이터를 자주 다시 가져오지 않습니다."

  • 오래된 쿼리(stale queries)는 다음과 같은 경우 백그라운드에서 자동으로 refetched됩니다:
    • 쿼리의 새 인스턴스가 마운트되는 경우
    • 창이 다시 refocused된 경우
    • 네트워크가 다시 연결된 경우
    • 쿼리는 선택적으로 refetch 간격으로 구성되었습니다.

예상치 못한 refetch가 표시되는 경우, 방금 창에 focused 되었고 TanStack 쿼리가 refetchOnWindowFocus를 수행 중이기 때문일 수 있습니다. 개발 중에는 특히 브라우저 개발자 도구와 앱 사이에 포커스를 맞추는 경우에도 리페치가 발생하기 때문에 더 자주 트리거될 수 있으므로 주의해야 합니다.

"이 기능을 변경하려면 refetchOnMount, refetchOnWindowFocus, refetchOnReconnect, refetchInterval과 같은 옵션을 사용할 수 있습니다."

  • useQuery, useInfiniteQuery 또는 query observers 활성 인스턴스가 더 이상 없는 쿼리 결과는 "inactive"로 레이블이 지정되며 나중에 다시 사용될 경우를 대비하여 캐시에 남아 있습니다.
  • 기본적으로 'inactive' 쿼리는 5분 후에 가비지 수집됩니다.

"이를 변경하려면 쿼리에 대한 기본 cacheTime1000 * 60 *5밀리초가 아닌 다른 값으로 변경하면 됩니다."

  • 기본적으로 쿼리 결과는 구조적으로 공유되어 데이터가 실제로 변경되었는지 감지하고, 변경되지 않은 경우 데이터 참조는 변경되지 않은 채로 유지되어 사용 메모 및 사용 콜백에 대한 값 안정화에 더 도움이 됩니다. 이 개념이 낯설게 들리더라도 걱정하지 마세요! 99.9%의 경우 이 기능을 비활성화할 필요가 없으며, 비용 부담 없이 앱의 성능을 향상시킬 수 있습니다.

"구조적 공유(structural sharing)는 JSON-compatible 값에서만 작동하며, 다른 값 타입은 항상 변경된 것으로 간주됩니다. 예를 들어 대용량 응답으로 인해 성능 문제가 발생하는 경우 config.structuralSharing 플래그를 사용하여 이 기능을 비활성화할 수 있습니다. 쿼리 응답에서 JSON과 호환되지 않는 값을 처리하면서도 데이터가 변경되었는지 여부를 감지하려는 경우 config.isDataEqual로 데이터 비교 함수를 정의하거나, 필요에 따라 참조를 유지하면서 이전 응답과 새 응답의 값을 계산하는 사용자 정의 함수를 config.structuralSharing으로 제공할 수 있습니다."

Further Reading

기본값에 대한 자세한 설명은 커뮤니티 리소스에서 다음 문서를 참조하세요:

Reference

profile
job's done

0개의 댓글