#36ReactMedium

useResource 훅 (캐시 + 디덥)

useResource 훅

키 기반 캐시와 동시 요청 디덥(dedup)을 갖춘 데이터 페칭 훅을 구현하세요.

시그니처

function useResource<T>(
  key: string,
  fetcher: () => Promise<T>
): {
  data: T | undefined;
  error: Error | null;
  isLoading: boolean;
  refetch: () => void;
};

요구사항

  • 인-메모리 캐시: 같은 key로 두 번 마운트되면 두 번째는 캐시에서 즉시 읽어옴 (네트워크 호출 없음).
  • 동시 요청 디덥: 같은 key에 대해 진행 중인 요청이 있으면 새 fetcher 호출을 만들지 않고 기존 promise를 공유.
  • refetch: 캐시와 in-flight 요청을 무효화하고 fetcher를 다시 호출.

학습 포인트

  • TanStack Query / SWR의 핵심 아이디어 (request dedup, cache by key) 구현
  • Module-level Map을 통한 캐시 공유
  • 컴포넌트 라이프사이클과 캐시 라이프사이클의 분리
Sandpack 로드 중…