본문 바로가기
부트캠프교육중/react

[React] React query 적용하기!!!

by 뭉지야 2023. 8. 26.
728x90

index.tsx

이거 추가하기

import { QueryClient, QueryClientProvider } from 'react-query';

const queryClient = new QueryClient();

<QueryClientProvider client={queryClient}>
</QueryClientProvider>
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { ThemeProvider } from 'styled-components';
import { theme } from './theme';
import { QueryClient, QueryClientProvider } from 'react-query';

const queryClient = new QueryClient();


const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <React.StrictMode>
    <QueryClientProvider client={queryClient}>
    <ThemeProvider theme={theme}>
    <App />
    </ThemeProvider>
    </QueryClientProvider>
  </React.StrictMode>
);

 

api.ts만들어서 이거추가.

export function fetchCoins(){
    return fetch("https://api.coinpaprika.com/v1/coins")
    .then((res)=> res.json());
}

 

Coins.tsx

const { isLoading, data } = useQuery("allCoins", fetchCoins)

useQuery는 2가지 argument를 필요로 하는데
첫번째는 querykey : query의 고유식별자다.(allCoins라고 지음.)
두번째는 fetcher함수이다. 난 이미 fetchCoins 라고 만들어둠.
fetchCoins가 끝나면 react query는 그 함수의 데이터를 여기 data에 넣어준다.

 

fetcher함수가 loading중이라면 react query는 isLoading에서 그걸 알려줄거다.
useQuery는 fetcher 함수를 부르고 fetcher함수가 끝나면 json을 data에 넣을거다

 

data가 그전에는 coins였고 그것의 interface가 CoinInterface였으니까 

const { isLoading, data } = useQuery<CoinInterface[]>("allCoins", fetchCoins)

이렇게 해주면된다.

 


그전과 차이가 있다면!!

뒤로가기로 돌아왔을때 로딩이 보이지 않는다!
react query가 데이터를 캐시에 저장해두기 때문이다.

그래서 react query는 api에 접근하지 않는다.
이게 react query를 사용하느냐 안하느냐의 아주 큰 차이다

 


Devtools라는게 있다
render할수 있는 component이고, 
react query에 있는 devtools를 import해오면 너의 캐시에 있는 query를 볼수 있다.

app.tsx

import { ReactQueryDevtools } from "react-query/devtools";
<ReactQueryDevtools initialIsOpen={true} />
728x90

'부트캠프교육중 > react' 카테고리의 다른 글

[React] React query 적용 후 코드  (0) 2023.08.26
[React] React query 적용하기 2  (0) 2023.08.26
[React] React query 적용 전 코드  (0) 2023.08.26
[React] useRouteMatch, useMatch  (0) 2023.08.25
[React] theme, globalstyled  (0) 2023.08.24