일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 태그된 유니온
- 이분 검색
- map
- dfs
- CI/CD
- 반공변성
- 무한 스크롤
- async/await
- RTK Query
- React
- Promise
- 결정 알고리즘
- Cypress
- 투포인터
- 호이스팅
- tailwind
- 공변성
- 인터섹션
- app router
- TS
- webpack
- recoil
- 타입 좁히기
- autosize
- ESlint
- CORS
- useAppDispatch
- Jest
- SSR
- 리터럴 타입
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
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