개발일지

react-query 본문

React

react-query

kosssshhhh 2023. 3. 9. 20:57

 

- 몇 초마다 자동으로 데이터 다시 가져오기 

- 요청 실패 시 몇 초 간격으로 재시도

- 다음 페이지 미리 가져오기 

- ajax 성공 / 실패 시 각각 다른 화면 보여주기 

 

 

 

ajax 요청하다가 보면 위와같은 기능들 필요하다 

 

react-query 사용하면 더욱 편리하다

 

실시간 데이터 보여주어야 하는 사이트들에서 유용

 

 

 

 

 

 

react-query 설치 세팅

 

터미널에 npm install react-query 작성

 

index.js 파일에서

 

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>
);

 

 

 

 

 

react-query 로 ajax 요청

 

react-query 사용하여 ajax 요청하면 편리한 기능들 제공한다.

 

function App(){
  let result = useQuery('작명', ()=>
    axios.get(URL)
    .then((a)=>{ return a.data })
  )
}

 

useQuery 상단에서 import 한 후, useQuery() 함수 안에 ajax 요청하면된다. 

 

 

 

 

 

장점 1. ajax 요청 성공 / 실패 / 로딩중 상태를 쉽게 파악 가능

 

function App(){
  let result = useQuery('작명', ()=>
    axios.get(URL)
    .then((a)=>{ return a.data })
  )

  return (
    <div>
      { result.isLoading && 'loading' }
      { result.error && 'error' }
      { result.data && result.data.name }
    </div>
  )
}

result 라는 변수에 ajax 의 현재 상태가 자동으로 저장된다. 

 

- ajax 요청 로딩중일 땐 result.isLoading 이 true

- ajax 요청 실패했을 땐 result.error 이 true

- ajax 요청 성공했을 땐 result.data 안에 데이터가 담긴다. 

 

 

 

 

 

 

장점 2. 자동으로 ajax 재요청해준다. 

 

페이지에 접속한 후 일정 시간이 지나거나, 다른 창으로 갔다가 현재 페이지로 돌아왔을 때, 다시 메인페이지로 돌아갔을 때, 알아서 ajax 요청 다시 해준다. 

 

요청 끄는법, 재요청 간격 조절하는 방법도 존재

 

 

 

 

 

장점 3. 실패 시 재시도 알아서 해준다. 

 

인터넷이 끊기거나 서버가 죽었을 때 ajax 요청이 실패한다. 

실패했을 땐 4, 5번 정도 재시도해준다. 

 

 

 

 

장점 4. ajax 로 가져온 결과는 state 공유 필요 없다. 

 

자식 컴포넌트에서 해당 데이터가 필요하면 props 이용하여 데이터를 전송해주면된다. 

 

하지만 react-query 사용하면 props 전송이 필요가 없다.

 

자식 컴포넌트에 ajax 요청하는 코드 똑같이 적어주면 된다.

 

그러면 react-query 에서 동일한 ajax 요청은 한번 더 해주고 캐싱 기능이 있어, 이미 같은 ajax 요청한 적이 있으면 가져와서 사용한다.

 

 

 

 

 

react-query 가 주장하는 장점은

 

server-state (DB 데이터)를 프론트엔드에서 실시간 동기화하는걸 도와준다고 한다.

 

근데 ajax 요청을 몇초마다 계속 날려서 가져오는 방식이라 비효율적일 수도 있다.

 

실시간으로 서버에 데이터를 자주 보내려면 웹소켓이나 Server-sent events 같은 가벼운 방식들도 있다.

 

따라서 react-query 는 ajax 관련 기능개발을 편하게 할 수 있는 것에 더 의의가 있다.

'React' 카테고리의 다른 글

Redux  (0) 2023.03.07
Context API  (0) 2023.03.07
Ajax 요청  (0) 2023.03.07
Lifecycle 과 useEffect  (0) 2023.02.26
React Router (navigate, nested routes, outlet), useParams  (0) 2023.02.25