🔥 백그라운드 가져오기 인디케이터

271자
4분

쿼리의 상태가 'pending'일 때 초기 로딩 상태를 표시하는 것만으로도 충분할 수 있습니다. 하지만 때로는 쿼리가 백그라운드에서 다시 가져오고 있다는 추가 인디케이터를 표시하고 싶을 수 있습니다. 이를 위해 쿼리는 'isFetching'이라는 불리언 값을 제공합니다. 이 값을 사용하면 상태 변수와 관계없이 가져오기 상태에 있음을 나타낼 수 있습니다.

다음은 이를 활용한 예제 코드입니다:

typescript
function Todos() {
  const {
    status,
    data: todos,
    error,
    isFetching,
  } = useQuery({
    queryKey: ['todos'],
    queryFn: fetchTodos,
  })
 
  if (status === 'pending') {
    return <span>불러오는 ...</span>
  }
 
  if (status === 'error') {
    return <span>오류: {error.message}</span>
  }
 
  return (
    <>
      {isFetching && <div>새로 고치는 ...</div>}
 
      <div>
        {todos.map((todo) => (
          <Todo todo={todo} />
        ))}
      </div>
    </>
  )
}
 
typescript
function Todos() {
  const {
    status,
    data: todos,
    error,
    isFetching,
  } = useQuery({
    queryKey: ['todos'],
    queryFn: fetchTodos,
  })
 
  if (status === 'pending') {
    return <span>불러오는 중...</span>
  }
 
  if (status === 'error') {
    return <span>오류: {error.message}</span>
  }
 
  return (
    <>
      {isFetching && <div>새로 고치는 ...</div>}
 
      <div>
        {todos.map((todo) => (
          <Todo todo={todo} />
        ))}
      </div>
    </>
  )
}
 

이 코드에서 우리는 쿼리의 상태에 따라 다른 내용을 표시합니다. 'pending' 상태일 때는 로딩 메시지를, 'error' 상태일 때는 오류 메시지를 보여줍니다. 그리고 데이터를 성공적으로 가져왔을 때는 할 일 목록을 표시하면서, 'isFetching' 값이 true일 경우 새로 고치는 중이라는 메시지도 함께 보여줍니다.

전역 백그라운드 가져오기 로딩 상태 표시하기

개별 쿼리의 로딩 상태 외에도, 백그라운드에서 실행 중인 쿼리를 포함해 어떤 쿼리라도 가져오기 중일 때 전역 로딩 인디케이터를 표시하고 싶을 수 있습니다. 이럴 때 'useIsFetching' 훅을 사용할 수 있습니다.

다음은 이를 활용한 예제 코드입니다:

typescript
import { useIsFetching } from '@tanstack/react-query'
 
function GlobalLoadingIndicator() {
  const isFetching = useIsFetching()
 
  if (isFetching) {
    return <div>쿼리가 백그라운드에서 가져오는 중입니다...</div>
  }
 
  return null
}
 
typescript
import { useIsFetching } from '@tanstack/react-query'
 
function GlobalLoadingIndicator() {
  const isFetching = useIsFetching()
 
  if (isFetching) {
    return <div>쿼리가 백그라운드에서 가져오는 중입니다...</div>
  }
 
  return null
}
 

이 코드에서 'useIsFetching' 훅은 현재 실행 중인 쿼리의 수를 반환합니다. 이 값이 0보다 크면 하나 이상의 쿼리가 실행 중임을 의미하므로, 이때 로딩 메시지를 표시합니다. 이를 통해 애플리케이션 전체에서 데이터 가져오기 작업이 진행 중임을 사용자에게 알릴 수 있습니다.

이러한 방식으로 백그라운드 가져오기 인디케이터를 구현하면, 사용자에게 더 나은 피드백을 제공하고 애플리케이션의 상태를 더 명확히 전달할 수 있습니다.

YouTube 영상

채널 보기
C++ 속의 펑터 | 프로그래머를 위한 카테고리 이론
NestJS 가드, 바이딩과 스코프 | NestJS 가이드
NestJS 파이프가 뭔가요? 컨트롤러를 보호하는 방법 | NestJS 가이드
NestJS 빌트인 파이프 ParseIntPipe, ParseUUIDPipe 사용하기 | NestJS 가이드
매번 ValidationPipe 복붙하세요? NestJS 전역 파이프로 한 번에 해결하기 | NestJS 가이드
미들웨어 vs 가드, 왜 NestJS에서는 가드가 더 똑똑할까? | NestJS 가이드
Zod로 스키마 유효성 검사 구현하기 | NestJS 가이드
바이펑터란? | 프로그래머를 위한 카테고리 이론