-
React Query) 1. useQuery로 데이터 가져오기TIL/React Query 2022. 2. 4. 01:04
1. 설치
npm i react-query
2. 세팅
root component를 QueryClientProvider로 감싸줍니다.
function App() { const queryClient = new QueryClient(); return ( <QueryClientProvider client={queryClient}> ... <ReactQueryDevtools initialIsOpen={false} position="bottom-right" /> // ReactQueryDevtools는 현재 react-query의 상태를 볼 수 있는 도구 </QueryClientProvider> ); }
여기까지 했으면 준비는 끝
3. 적용
기본 사용법은
- 사용할 컴포넌트에서 useQuery를 선언하고
- 인자로 queryKey, API 호출 함수, 옵션을 넣습니다.
- 객체 분할하여 사용할 값을 사용합니다.
주저리 주저리 설명하는 것보다 코드로 보는 게 이해가 빠를 거 같네요
바로 useQuery를 사용해 데이터를 불러와 보겠습니다.
불러오는 데이터는 superheroes
"superheroes": [ { "id": 1, "name": "Batman", "alterEgo": "Bruce Wayne" }, { "id": 2, "name": "Superman", "alterEgo": "Clark Kent" }, { "id": 3, "name": "Wonder Woman", "alterEgo": "Princess Diana" } ]
id, name, alterEgo 을 가지고 있는 json 파일입니다.
const { data, isLoading, error, isError, isFetching } = useQuery("super-heros", ()=> axios.get(`${url}`), { opctions... });
받는 값 :
객체 분할하여 받을수있는 대표적인 값은
- data : API 함수로 불러온 값
- isLoading : data가 들어오지 않았다면 false, 들어오면 true
- error : 에러가 났을 때 뜨는 Error 값 (404 not found, 400 Bad request 등)
- isError : 에러면 true, 아니면 false
- isFetching : 서버와 통신을 했으면 true 안 했으면 false
등을 react query가 알아서 만들어서 주니 정말 편합니다.
어떻게 사용하면 좋을지 간단하게 보여드리면
if (isLoading || isFetching) { return <h2>Loading...</h2>; } if (error) { return <h2>Error : {error.message}</h2>; }
정말 쉽습니다!
인자 :
useQuery의 첫 번째 인자는 queryKey로 각 요청을 구분하기 위한 인자입니다.
배열이 들어가도 좋습니다. (pagenation 할 때 쓰입니다.)
두 번째 인자는 API 요청 함수를 적어주면 되고
세 번째 인자는 opction으로 여러 가지 기능이 있습니다.
staleTime :더 길게 지정하면 staleTime쿼리가 데이터를 자주 다시 가져오지 않습니다.default value : 0초이유 : 0초가 안전해서cacheTime :기본적으로 "비활성" 쿼리는 5분 후에 가비지 수집 됩니다.이를 변경하려면 cacheTime쿼리 의 기본값 을 1000 60 5밀리초가 아닌 다른 값 으로 변경할 수 있습니다 .refetchOnMount :mount 될때마다 매번 fetch(true / false / "always")refetchInterval :실시간 데이터 fetch나 주식같이 초단위로 fetch 해야하는 경우 사용refetchIntervalBackground :백그라운드에서도 초단위로 refetchenabled :false면 fetch하지 않음 but, refetch 함수가 실행되면 fetch됨onSuccess :성공할시 실행할 함수,onError:실패할시 실행할 함수select :데이터를 받고나서 가공한다음에 뿌려주는 역할활용 예시)const { isLoading, data, error, isFetching } = useQuery("super-heros", ()=> axios.get(`${url}`),{ staleTime: 5 * 60 * 1000, // 5분마다 데이터를 fetch 합니다. cacheTime: 5 * 60 * 1000, // 데이터 캐싱 유지를 5분동안 합니다. select: (data) => { const superHeroNames = data.map((hero) => hero.name); return superHeroNames; }, // response 데이터 객체에서 name 컬럼만 빼내어 가공한뒤 return 합니다 });
'TIL > React Query' 카테고리의 다른 글
React Query) 5. useMutation 사용해보기 (0) 2022.03.20 React Query) 4. React query로 InfiniteScroll 무한 스크롤 구현하기 (0) 2022.03.20 React Query) 3. PagenatedQueris 페이지네이션 구현하기 (2) 2022.02.23 React Query) 2. React Query로 동적쿼리, 병렬 쿼리만들기 (DynamicQueries, ParallelQueries) (0) 2022.02.04