티스토리 뷰
사용하는 이유
React Query는 종종 React를 위한 누락된 데이터 페칭 라이브러리로 설명되지만, 보다 기술적인 용어로 React 애플리케이션에서 서버 상태를 가져오고, 캐싱하고, 동기화하고, 업데이트하는 것을 미풍스럽게 한다.
>>React에서 API 의 정보를 가져오는데 더욱 관리하기 쉽게 해준다는 의미이다.
왜냐하면 React Query 를 사용하지 않을 때에는 data를 처리하는 함수코드와 isLoading 을 처리해주는 함수 , Error 를 처리해주는 함수 등 여러부분을 신경써야 하지만 React Query에는 이미 대부분의 기능들이 내장되어 있어 사용하기만 하면 됩니다.
설치법
$ npm i react-query
# or
$ yarn add react-query
사용법
1.QueryClient 와 QueryClientProvider 을 import 해주고 앱에 적용해줍니다.
import { QueryClient, QueryClientProvider } from 'react-query'
const queryClient = new QueryClient()
function App() {
return <QueryClientProvider client={queryClient}>...</QueryClientProvider>
}
2.API 를 fetch 해준 뒤 export 해줍니다.
export function getMovies() {
return fetch(`${BASE_URL}/movie/now_playing?api_key=${API_KEY}`).then(
(response) => response.json()
);
}
* 타입스크립트의 경우 interface도 export 해줍니다
export interface IMovie {
backdrop_path: string;
id: number;
original_title: string;
overview: string;
poster_path: string;
title: string;
release_date: string;
vote_average: number;
}
export interface IGetMoviesProps {
dates: {
maximum: string;
minimum: string;
};
page: number;
results: IMovie[];
total_pages: number;
total_results: number;
}
3. 문자열을 사용하는 키와 배열을 사용하는 키를 이용해 useQuery() 사용
*문자열만 사용하는 키의 경우
import { useQuery } from 'react-query'
function App() {
const info = useQuery('todos', fetchTodoList)
}
*배열을 사용하여 유니크한 키를 이용하는 경우
// An individual todo
useQuery(['todo', 5], ...)
// queryKey === ['todo', 5]
// An individual todo in a "preview" format
useQuery(['todo', 5, { preview: true }], ...)
// queryKey === ['todo', 5, { preview: true }]
// A list of todos that are "done"
useQuery(['todos', { type: 'done' }], ...)
// queryKey === ['todos', { type: 'done' }]
function Todos({ todoId }) {
const result = useQuery(['todos', todoId], () => fetchTodoById(todoId))
}
4. fetch 한 API 의 데이터를 알려주는 data , 로딩중인 것을 알려주는 isLoading
const { data, isLoading } = useQuery<IGetMoviesProps>(
["movies", "nowPlaying"],
getMovies
);
const {data, isLoading} =useQuery <타입스크립트 인터페이스>(["유니크값","유니크값"] ,API fetch하는 함수>> [] useQuery에서는 배열 자체를 유니크한 값으로 생각하기에 배열의 원소까지 완전 똑같지만 않으면 배열안의 원소는 다른곳에도 사용 가능합니다.
5. 이제 fetch 한 데이터를 사용하시면 됩니다.
<Wrapper>
{isLoading ? (
<Loader>Loading...</Loader>
) : (
<>
<Banner
onClick={increaseIndex}
isBack={makeImageHelper(data?.results[0].backdrop_path || "")}
>
<Title>{data?.results[0].title}</Title>
<Overview>{data?.results[0].overview}</Overview>
</Banner>
API 실시간으로 갱신되게 처리하는 방법
const { isLoading: CoinInfoLoading, data: CoinInfoData } =
useQuery<ICoinInfo>(["coinInfo", coinId], () => fetchCoinInfo(coinId), {
refetchInterval: 10000,
});
옵션 중 하나인 refetchInterval 을 설정하면 됩니다.
다른 옵션에는 Error을 감지하는 경우와 API fetch 에 실패하였을 때 몇번 재시도할건지 설정할 수도 있습니다.
DOC 문서를 보고 필요한 것이 있으면 적용해주어야겠습니다.
https://react-query.tanstack.com/guides/window-focus-refetching#_top
'react' 카테고리의 다른 글
리액트로 라이브러리 없이 캐러셀 슬라이드 만들기 (0) | 2022.01.25 |
---|---|
React, 노마드 코더 강의 / 영화 사이트 만들면서 어려웠던 부분들 5가지 , 후기 (0) | 2021.12.24 |
Recoil 에서 Selector 기능 get, set 사용법 (0) | 2021.12.04 |
Simple form validation with React Hook Form 에 관한 글 (0) | 2021.12.03 |
use State Management 를 해주는 Recoil에 관한 글 (0) | 2021.12.02 |
- Total
- Today
- Yesterday
- env
- React
- nodejs
- nextjs
- NextApiRequest
- WSL2
- createPortal
- 북클럽
- 아차산
- electron
- jest
- 스토리 북
- TopLayer
- 우아한테크코스
- 노마드코더
- import/order
- Storybook
- 원티드
- NextRequest
- C언어
- CLASS
- 초보
- error
- javascript
- 윤성우 열혈C프로그래밍
- 위코드
- 노개북
- 프리온보딩
- 프론트앤드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |