Po_tta_tt0
콩심콩 팥심팥 🌱
Po_tta_tt0
전체 방문자
오늘
어제
  • 분류 전체보기 (266)
    • 🐛 회고 (14)
    • 💭 생각 (2)
    • 🤸‍♀️ 내 프로젝트 (16)
      • FISH-NEWS (8)
      • MBTI 과몰입 테스트 (2)
      • twitter clonecoding with TS (4)
      • pilzagenda (2)
    • 👨‍👩‍👧‍👦 팀 프로젝트 (2)
      • 피우다 프로젝트 (0)
      • SEMO(세상의 모든 모임) (1)
      • 마음을 전하는 텃밭 (1)
      • Stackticon (0)
    • 👨‍💻 CS지식 (11)
    • ✍ 공부 (94)
      • JavaScript (21)
      • TypeScript (39)
      • Html (0)
      • CSS (2)
      • React (18)
      • NextJS (7)
      • Vue (1)
      • Python (1)
      • Django (0)
      • 개발환경 & 그 외 (2)
    • 🏄‍♀️ 코딩테스트 (99)
      • 🐍 Python (99)
    • 🐙 Git & GitHub (3)
    • 📑 오류기록 (8)
    • 📚 우리를 위한 기록 (9)
    • 수업 (3)
    • 강의 등 (2)
    • 👩‍🎓 SSAFY (0)
    • 👋 우테코 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • BFS + DP
  • dfs
  • 시뮬레이션
  • 백준
  • 백준 숨바꼭질
  • 백준 파이썬
  • bfs
  • 구현
  • react-router-dom
  • 파이썬
  • 문자열
  • js
  • React
  • DP
  • 자바스크립트
  • 파이썬 감시 피하기
  • 플로이드 워셜
  • 파이썬 다익스트라
  • Next.js
  • 이분탐색

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Po_tta_tt0

콩심콩 팥심팥 🌱

🔧[ React Query ] 리엑트 쿼리 사용법
✍ 공부/React

🔧[ React Query ] 리엑트 쿼리 사용법

2022. 1. 19. 13:22
반응형

 

 

 

 

 

 

 

 

 

 

 

 

react query란?

 

Fetch, cache and update data in your React and React Native applications all without touching any "global state".

=> react나 react native에서 전역상태를 건드리지 않고 데이터를 fetch, cache, update할 수 있게 하는 상태 관리 도구.

서버 상태를 관리하는 라이브러리이다.

'서버와 클라이언트 사이 비동기 로직을 쉽게 다루게 해주는 도구.'

 

 

 

성능

 

복잡한 코드를 몇 줄의 코드로 교체할 수 있다.

새로운 데이터 소스를 연결하는 것이 편리해진다.

복잡하고 계속되는 데이터 소스의 re-road를 막을 수 있다.

메모리 성능을 높일 수 있다

 

 

 

 

 

 

설치

npm i react-query

yarn add react-query

 
 

 

 
 

 

사용법

React qurey는 함수형 컴포넌트 안에서 훅 형태로 사용된다.

 

1. 캐시 관리 인스턴스 연결하기

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

const queryClient = new QueryClient();

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

react query는 queryClicent라는 인스턴스를 사용해 캐시를 관리한다.

컴포넌트가 useQuery훅을 사용할 수 있도록 QueryClientProvider을 상위 컴포넌트에 추가해주어야 한다

 

 

 

 

2. 데이터 가져오기

데이터를 사용할 곳에 가서 useQuery를 import해준다.

useQuery는 두 가지 인자를 필요로 한다.

- queryKey : 우리 query의 고유식별자 ("고유이름")

- fetcher 함수 : fetchecdData

- refetch interval : refetch하는 interval을 정할 수 있다 (옵션)

 

  const { isLoading, data } = useQuery("고유이름", fetchedData)

useQuery는 isLoading이라고 불리는 boolean값을 리턴하는데,

 

 

이 isLoading은 react query를 사용하지 않고 만들었던 

[loading, setLoading] = useState()

를 대체할 수 있다.

 

 

1. React query에서 useQuery라는 훅이 fetcher함수를 불러오고

/ data 받아오는중

2. fetcher function이 isloading이라면 reactQuery에서 boolean값을 얻어올 수 있다. (isLoading : true)

/ data 받아오는중

3. 그리고 fetcher function의 isloading이 끝나면 React query에게 이 사실을 전달받을 수 있다(isLoading : false)

/ data를 다 받아와 useQuery의 두 번째 인자로 저장

 

 

 

정리

isLoading은 data를 받기 전에는 true(로딩상태일때 true), 받은 후에는 false값을 가지게 되고

data가 받아와지면 useQuery의 두 번째 인자로 저장된다.

 

 

 

 

 

 

++

만약 n가지의 useQuery hook을 같이쓴다면?

 

  const { isLoading: flowerPriceLoading, data: flowerPriceData } = useQuery(["가격", floverId], () => fetchflowerPrice(flowerId));
  const { isLoading: flowerLangLoading, data: flowerLangData } = useQuery(["꽃말", flowerId], () => fetchflowerLang(flowerId));

flowerId가 같을 때 (ex) 수선화

고유한 key가 있어야 하기 때문에 둘 다 useQuery의 첫 번째 인자로 flowerId를 집어넣게되면 고유 key를 만족하지 못한다.

=> 배열로 다른 값들을 넣어주면 고유한 id가 된다.

 

 

 

 

옵션

 initialIsOpen: Boolean

 - 개발 도구를 기본으로 연다(true)

panelProps: PropsObjedt

 - 패널에 props를 추가한다.

closeButtonProps: PropsObject

 - 닫기 버튼에 props 추가

toogleButtonProps: PropsObject

 - 토글 버튼에 props 추가

 

 

https://react-query.tanstack.com/overview

더 다양한 옵션과 설명은 공식문서를 참고하자.

 

 

 

 

React query 사용의 이점

 

1. 캐시 사용 => 메모리 성능 향상

 

react query를 가용함으로서 react query가 데이터를 캐시에 저장해두기때문에

같은 데이터를 받아와 발생하는 로딩이 사라진다.

 

ex)

꽃들이 들어있는 화면에서 data를 받아오는 상황.

1. 꽃들이 들어있는 화면 => 꽃(item) 클릭 => 꽃의 세부사항을 알려주는 화면

2. 꽃의 세부사항을 알려주는 화면 =>*** LOADING *** => 꽃들이 들어있는 화면 

react query를 사용하면 2번에서 발생하는 loading이 사라진다는 소리.

 

 

 

 

2. react query가 제공하는 Devtools.

 

import { ReactQueryDevtools } from "react-query/devtools";

ReactQueryDevtools를 import해오고 나서

 

 <ReactQueryDevtools initialIsOpen={true} />

initialIsOpen 옵션을 true로 설정하면

화면에 devtools가 뜬다.

이 devtool을 통해 캐시에 무엇을 가지고 있는지를 편하게 볼 수 있다.

+

refetch, reset 등 trigger도 가능하다.

 

 

 

3. 코드의 간결함.

 

 

 

 

 

 

도움을 받은 문서들
 

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

 

https://blog.rhostem.com/posts/2021-02-01T00:00:00.000Z

 

https://www.js2uix.com/frontend/react-query-step1/#%EC%84%9C%EB%B2%84-%EC%83%81%ED%83%9C

 

 

 

 

 

2022.01.19 

계속 이용해보며 새로 알아가는 사실들을 업데이트 할 예정.

 

 

 

 

 

 

반응형

'✍ 공부 > React' 카테고리의 다른 글

BrowserRouter HashRouter 차이 + BrowserRouter 배포시 흰 화면 문제  (0) 2022.03.14
react로 setInterval을 사용할 때 겪을 수 있는 문제들  (0) 2022.02.24
🔧[ recoil ] recoil로 react 상태관리 하기  (0) 2022.01.26
🥜 [ React ] react 학습내용 나름대로 정리하기 1  (0) 2022.01.21
🔧[ React-router-dom ] react-router-dom v6 달라진 점  (0) 2022.01.15
    '✍ 공부/React' 카테고리의 다른 글
    • react로 setInterval을 사용할 때 겪을 수 있는 문제들
    • 🔧[ recoil ] recoil로 react 상태관리 하기
    • 🥜 [ React ] react 학습내용 나름대로 정리하기 1
    • 🔧[ React-router-dom ] react-router-dom v6 달라진 점
    Po_tta_tt0
    Po_tta_tt0
    감자의 코딩하는 블로그 콩심은데 콩나고 팥심은데 팥난다

    티스토리툴바