react-query

๋ฆฌ์ถฉ๋…•ยท2023๋…„ 12์›” 23์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
19/29

๐Ÿ“‹ react-query

react-query๋Š” ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„œ๋ฒ„ ์ƒํƒœ ๊ฐ€์ ธ์˜ค๊ธฐ, ์บ์‹ฑ, ๋™๊ธฐํ™” ๋ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.


QueryClientProvider

react query๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  provider๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋ณดํ†ต ์ตœ์ƒ๋‹จ ์—˜๋ฆฌ๋จผํŠธ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ client props๋ฅผ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์ „๋‹ฌํ•  props๊ฐ’์€ QueryClient์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

QueryClientProvier๋ฅผ ํ†ตํ•ด ์•ฑ ์ „์ฒด์—์„œ QueryClent์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • index.tsx
import { QueryClient, QueryClientProvider } from 'react-query';

const queryClient = new QueryClient();

root.render(
  <QueryClientProvider client={queryClient}>
	  <App />
  </QueryClientProvider>
);

QueryClient

QueryClent๋Š” ์บ์‹œ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ 

QueryClient ๊ณต์‹๋ฌธ์„œ


useQuery

QueryClientProvier๋ฅผ ํ†ตํ•ด ๋‚ด๋ ค์ค€ QueryClient์— ์ ‘๊ทผํ•˜๋ ค๋ฉด useQuery ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ getํ•˜๊ธฐ ์œ„ํ•œ api๋กœ, post, update๋Š” useMutation์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๊ฐ–๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” quearyKey(query ๊ณ ์œ  ์‹๋ณ„์ž), ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” queryFn(api fetchํ•  ํ•จ์ˆ˜)๋ฅผ ๊ฐ–๋Š”๋‹ค.

import { useQuery } from "react-query";

const coinInfo = useQuery("coinList", fetchCoinList);
  • ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ค๋Š” ์ค‘

  • ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜จ ์ƒํƒœ

์œ„ ๋‘ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ๋Š” isLoading ๊ฐ’์ด true, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ ํ›„์—๋Š” false๋กœ ๋ฐ”๋€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

isLoading์ด๋ผ๋Š” ๊ฐ’์„ ๋กœ๋”ฉ์ฐฝ ๊ตฌํ˜„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

api์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋Š” data ๊ฐ’์— ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค.


devtools

์‚ฌ์šฉ์ž์˜ ์บ์‹œ์— ์กด์žฌํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ด๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ReactQueryDevtools ๋ชจ๋“ˆ import
  2. devtools ์˜ต์…˜ ์„ค์ •

devtools๋Š” ๋˜๋„๋ก ์ตœ์ƒ๋‹จ ์—˜๋ฆฌ๋จผํŠธ ๋‚ด๋ถ€์— ์ •์˜ํ•˜๋„๋ก ํ•˜์ž. ํŽ˜์ด์ง€ ๋ฃจํŠธ์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ์ž˜ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • App.tsx
import {ReactQueryDevtools} from "react-query/devtools";

const App = () => {
  <ReactQueryDevtools initialIsOen={true} />
}

์˜ต์…˜์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์ž.

react-query-devtools

devtools๋ฅผ ์ •์˜ํ•˜๋ฉด ์‹คํ–‰์ค‘์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณด์œ ์ค‘์ธ ์ฟผ๋ฆฌ, ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

react query ์‚ฌ์šฉ์‹œ ํ•œ๋ฒˆ fetch ๋œ ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์— ๋‚จ์•„์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”ฉ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ตœ์ดˆ ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ฌ ๋•Œ๋งŒ ๋กœ๋”ฉ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•œ๋‹ค.

์บ์‹œ์— ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์š”์ฒญํ•  ํ•„์š” ์—†์ด ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


์ฐธ๊ณ 
react query ๊ณต์‹๋ฌธ์„œ
react-query ์ฐธ๊ณ ๋ธ”๋กœ๊ทธ

0๊ฐœ์˜ ๋Œ“๊ธ€