dukDukz

React-Query 비동기 통신 (기본편) 본문

웹 개발/React

React-Query 비동기 통신 (기본편)

헤일리_HJ 2022. 2. 11. 18:31

https://techblog.woowahan.com/6339/

 

Store에서 비동기 통신 분리하기 (feat. React Query) | 우아한형제들 기술블로그

오늘은 주문에서 사용하는 FE 프로덕트의 구조 개편을 준비하며 FE에서 사용하는 Store에 대해 개인적인 고민 및 팀원들과 검토하고 논의했던 내용을 소개합니다. 이 과정에서 생긴 여러 가지 의

techblog.woowahan.com

여기를 읽어보면 왜 react-query가 필요한지 알 수 있다.

간단하게 정리하자면 Store에서 비동기 통신을 분리함으로써 store에서는 온전히 상태관리만 할 수 있게 하는 것이다.

그리고 react-query를 쓰면 로딩, 에러 처리가 엄청 간단해진다.

 

https://www.youtube.com/watch?v=hooXEH8ub4A

https://www.youtube.com/channel/UCiw6ewVgQkLMmgWjQp1-gKQ

 

몰입코딩 아카이브

https://class101.app/e/FlowCoding_Web_class 이번에 클래스101에서 웹퍼블리싱강의를 만들게 되었습니다.

www.youtube.com

이 강의를 참고해서 영화 api 를 통해 react-query로 비동기 통신을 해보았다.

한국어 강의는 이게 유일한듯! 

 

+ 더 자세히 강의를 듣고 싶다면 

유튜브에서 react query 라고 검색하면 영어 강의들이 많~~이 나온다.

쉽게 알려주는 것 같으니... 추가로 들어보려고 한다.

 

 

 

 

1. CRA 로 프로젝트를 하나 만든다.

npx create-react-app react-query

 

2. react-query 와 axios를 설치한다.

npm i react-query axios

 

+ 나는 eslint 와 prettier를 적용시켰지만 여기서는 제외하고 설명하겠다.

 

 

root 디렉토리에서

 

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { QueryClient, QueryClientProvider } from 'react-query';

const queryClient = new QueryClient();

ReactDOM.render(
  <React.StrictMode>
    <QueryClientProvider client={queryClient}>
      <App />
    </QueryClientProvider>
  </React.StrictMode>,
  document.getElementById('root'),
);

QueryClientProvider 로 묶어줘서  App 안에서 react-query를 사용할 수 있게 한다.

 

 

 

 

App.js

import React from 'react';
import { setQuery, useQuery } from 'react-query';

function App() {
  const { isLoading, error, data } = useQuery('movieList', () =>
    fetch('https://yts.mx/api/v2/list_movies.json?with_images=true').then((res) => res.json()),
  );

  if (isLoading) return 'Loading...';

  if (error) return 'An error has occurred: ' + error.message;

  return (
    <div>
      <ul>
        {data.data.movies.map((movie, idx) => (
          <li key={idx}>
            <h5>{movie.title_long}</h5>
            <img src={movie.large_cover_image} alt="" />
            <p>장르 : {movie.genres[0]}</p>
            <p>상영시간 : {movie.runtime}분</p>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default App;

useQuery를 사용해서 해당 api를 통해 json 값을 받아오자

 

영화 api는 

 

https://yts.mx/api

 

API Documentation - YTS YIFY

Official YTS YIFY API documentation. YTS offers free API - an easy way to access the YIFY movies details.

yts.mx

여기서 확인할 수 있다.

 

useQuery를 쓰면 로딩, 에러 처리가 if 문 한줄로 처리가 된다. 따로 로딩과 에러의 state를 만들어줄 필요가 없다.

 

json 파일을 확인해보면 data.data.movies 가 배열이며 이 안에 영화 정보를 담겨 있다.

json 파일 확인해가면서 원하는 정보를 빼주면된다.

 

 

'웹 개발 > React' 카테고리의 다른 글

useQuery - Missing queryFn error  (0) 2022.03.11
React classNames  (0) 2022.02.14
[Error] Manifest: Line: 1, column: 1, Syntax error.  (0) 2022.02.11
React -redux 복습 -> counter  (0) 2022.02.07
[React] useReducer  (0) 2022.01.27