
React-Query는 React 애플리케이션에서 데이터를 관리하기 위한 새로운 라이브러리다.
애플리케이션에서 데이터를 가져오고 fetching, caching에 있어 간단하고 강력한 솔루션을 제공하고 React Application에서 서버상태를 불러오고 캐싱하며, 지속적으로 동기화 및 업데이트 하는 작업을 도와주는 라이브러리다.
또한 복잡하고 장황한 코드가 필요한 다른 데이터 불러오기 방식과는 다르게 React Component 내부에서 간단하고 직관적으로 API를 사용할수있다.
더 나아가 React Query에서 제공하는 캐싱, Window Focus Refetcing 등 다양한 기능을 활용하여 API요청과 관련된 번잡한 작업 없이 핵심로직에 집중할수있다.
(카카오페이 리액트쿼리 링크텍스트 )
ajax요청하다보면 종종 필요로한 기능들중에
이럴때 react-query라는 라이브러리를 설치해서 사용하면 좋다는것인데 SNS, 코인거래소같은 실시간 데이터를 보여줘야하는 경우에 굉장히 유용한 기능이다. (이외에는 딱히 필요가 없다)
import {QueryClient, QueryClientProvider} from "react-query"; // 1번
const queryClient = new QueryClient() // 2번
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<QueryClientProvider client={queryClient}> //3번
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>
</QueryClientProvider>
);
import { useQuery } from "react-query"
let result = useQuery('작명', ()=>
axios.get('https://codingapple1.github.io/userdata.json').then((a)=>{
return a.data
})
)
<Navbar bg="dark" data-bs-theme="dark">
<Nav className="me-auto">
<Nav.Link className="ms-auto">
{ result.isLoading && '로딩중입니다.'}
{ result.error && '에러남.'}
{ result.data && result.data.name }
</Nav.Link>
</Nav>
</Navbar>
result 변수에 ajax 현재 상태가 알아서 저장이 되는데
function App(){
let result = useQuery('작명', ()=>
axios.get('https://codingapple1.github.io/userdata.json')
.then((a)=>{ return a.data })
)
return (
<div>
{ result.isLoading && 'loading...' }
{ result.error && 'error!' }
{ result.data && result.data.name }
</div>
)
}
ajax 성공시엔 <A /> 보여주세요. 실패시엔 <B /> 보여주세요
이렇게 직접 state를 만들었어야했지만 이럴필요가 전혀없다는 장점이다.
또한 리패치되는 간격이 설정이 가능한데 staleTime : 2000
2초 이내에는 다시 접속해도 refetch가 되지 않는식의 타이머기능 또한 가능하다.
let result = useQuery('작명', ()=>
axios.get('https://codingapple1.github.io/userdata.json').then((a)=>{
console.log('요청됨')
return a.data
}),
{staleTime : 2000 }
)
여러차례 재시도를 하는것을 볼수가 있다.
현재 App 컴포넌트에서 유저이름을 가져오는 ajax요청을 하고있는데 이때 유저이름의 결과가 그 하위 컴포넌트중에 또 필요로 하다면 ?
→ 일반적으로 우리는 유저이름을 props 전송하면 된다 생각하겠지만 그럴필요가 없다.
Detail 컴포넌트에서 유저 이름 ajax요청하는 코드를 똑같이 또 적으면 된다.
react-query에서는 이때 똑같은 ajax 요청이 2개나 있으면 1개만 날려주며
캐싱기능까지도 있기때문에 이전에같은 요청을 한 ajax가 있을 경우 그걸 우선 가져와서 쓴다는것이다.