| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
													Tags
													
											
												
												- 반공변성
 - recoil
 - 투포인터
 - 공변성
 - app router
 - Promise
 - useAppDispatch
 - webpack
 - 인증/인가
 - SSR
 - CI/CD
 - Jest
 - 무한 스크롤
 - 인터섹션
 - 리터럴 타입
 - dfs
 - CORS
 - 호이스팅
 - autosize
 - 태그된 유니온
 - map
 - 타입 좁히기
 - React
 - async/await
 - 결정 알고리즘
 - RTK Query
 - MSA
 - ESlint
 - TS
 - tailwind
 
													Archives
													
											
												
												- Today
 
- Total
 
짧은코딩
React Query Loading 중앙화 본문
반응형
    
    
    
  React Query에서 데이터를 불러오는 올 때 isLoading을 중앙화할 수 있다.
- Loading 컴포넌트를 만든다.
 - App.tsx에 Loading 컴포넌트를 넣어준다.
 
Loading
import { Spinner } from '@chakra-ui/react';
import { useIsFetching, useIsMutating } from 'react-query';
interface Props {
  isLoading?: boolean;
}
export default function Loading({ isLoading }: Props) {
  // useIsFetching은 현재 가져오고 있는 쿼리 호출의 정수 값을 리턴한다.
  const isFetching = useIsFetching(); // for now, just don't display
  // useIsFetching과 비슷하지만 변이 호출 중 현재 해결되지 않은 것이 있는지 알려준다.
  const isMutating = useIsMutating();
  
  const display = isLoading ? 'inherit' : isFetching || isMutating ? 'inherit' : 'none';
  return (
    <Spinner
      thickness="4px"
      speed="0.65s"
      emptyColor="olive.200"
      color="olive.800"
      role="status"
      position="fixed"
      zIndex="9999"
      top="50%"
      left="50%"
      transform="translate(-50%, -50%)"
      display={display}
    />
  );
}
- 기본적으로 isFetching이나 isMutating이 true이면 Spinner가 나오게 했다.
 - React Query를 사용하지 않는 부분에서도 Spinner가 나오고 싶게 하기 위해서 isLoading이란 props를 받았다.
 - useIsFetching()
- 중앙화된 로딩 인디케이션 적용
 - 현재 가져오는 중인 쿼리가 있는지 알려주는 훅
 - 각각의 커스텀 훅에 대해 isFetching을 사용할 필요가 없어진다.
 - 현재 가져오기 상태인 쿼리 호출의 수를 나타내는 정수값을 반환한다.
 - useIsFetching이 0보다 크면 가져오기 상태인 호출이 존재하며 참으로 평가된다.
 
 - useIsMutating()
- useIsFetching과 같으며 유일한 차이점은 mutate 호출 중인 것을 기준으로 알려준다.
 
 
App.tsx
  return (
    <QueryClientProvider client={queryClient}>
      <ChakraProvider>
        <GoogleOAuthProvider clientId={clientId}>
          <Scrollbars
            style={{ width: '100vw', height: '100vh' }}
            autoHide
            autoHideTimeout={1000}
            // Duration for hide animation in ms.
            autoHideDuration={200}
          >
            <BrowserRouter>
              <Loading /> // 중앙화한 Loading
              <section className={'h-[5.7rem]'} onClick={onCloseProduct}>
                <Header />
              </section>
              <section className={'h-noneHeader'} onClick={onCloseProduct}>
                <Routes>
                // ... 경로들
                </Routes>
              </section>
            </BrowserRouter>
          </Scrollbars>
          {showDevtools && <ReactQueryDevtools />}
        </GoogleOAuthProvider>
      </ChakraProvider>
    </QueryClientProvider>
  );
-출처
https://velog.io/@zooyaho/React-Query-%EC%A4%91%EC%95%99-%EC%A7%91%EC%A4%91%ED%99%94
React Query - 중앙 집중화
useIsFetching 중앙화된 로딩 인디케이션 적용 현재 가져오는 중인 쿼리가 있는지 알려주는 훅 각각의 커스텀 훅에 대해 isFetching을 사용할 필요가 없어진다. 현재 가져오기 상태인 쿼리 호출의 수를
velog.io
https://www.udemy.com/course/react-query-react/
반응형
    
    
    
  'UpLog 릴리즈노트 프로젝트' 카테고리의 다른 글
| 로그인 이후의 관리 방식 (0) | 2024.02.17 | 
|---|---|
| axios interceptors를 활용하여 JWT 관리하기 with MSW2 (0) | 2024.02.13 | 
| Vite에서 Jest를 사용하지 않고 Cypress만 쓰기로 한 이유 (0) | 2024.02.13 | 
| MSW2 사용 중 Warning: captured a request without a matching request handler (0) | 2024.02.05 | 
| UpLog 프론트엔드 CI/CD4(URL 카톡 공유, AWS 과금 알람, 적용 후기) (0) | 2023.09.04 | 
			  Comments