React Query

Jinwoo Maยท2023๋…„ 12์›” 4์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
16/17
post-thumbnail

1. React Query

๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ฏธ๋“ค์›จ์–ด
Redux-thunk์— ๋น„ํ•ด
1. ์ฝ”๋“œ๋Ÿ‰์ด ์ ๋‹ค. (๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ)
2. ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ถ€๋ถ„์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป์ด ์ผ์–ด๋‚˜๋„ ๋‚ด ํƒ“์ด ์•„๋‹ˆ๋‹ค!
3. ์‚ฌ์šฉ๋ฒ•์ด ์‰ฝ๋‹ค!
๋ผ๋Š” ๊ฐ•์ ์ด ์žˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

Query

  • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์š”์ฒญ
  • axios์˜ get๊ณผ ๋น„์Šทํ•˜๋‹ค ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

Mutation

  • ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ
  • ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ (Create, Update, Delete)

Query Invalidation

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ์ƒˆ๋กœ๊ณ ์นจํ•˜์ง€ ์•Š์•„๋„ ์ตœ์‹ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™”๋ฉด์— ๋ถˆ๋Ÿฌ์™€์ง„๋‹ค.

์‹ค์Šต

react-query ์„ค์น˜

yarn add react-query

App.jsx

const App = () => {

  return (
    <QueryClientProvider client={queryClient}>
      <Router />;
    </QueryClientProvider>
  );
};

์ตœ์ƒ์œ„์— Query Client Provider๋กœ ๊ฐ์‹ธ์ฃผ์–ด ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋“ค์— ์ ์šฉ์‹œํ‚จ๋‹ค.

useQuery

src/api ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ ํ›„ api๋ฅผ ๊ด€๋ฆฌํ•  todos.js๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

src/api/todos.js

import axios from "axios";

// ๋ชจ๋“  todos๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” api
const getTodos = async () => {
  const response = await axios.get(`์„œ๋ฒ„์ฃผ์†Œ`);
  return response;
};

export { getTodos };

๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

const { isLoading, isError, data } = useQuery("todos", getTodos);

React Query๋Š” isLoading๊ณผ isError์— ๋”ฐ๋ผ ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ธฐ์ƒํƒœ ์ฒ˜๋ฆฌ์™€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ถ€๋ถ„๋„ ์•„์ฃผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
๊ตฌ์กฐ๋ถ„ํ•ด๋ฅผ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์˜จ data๋ผ๋Š” ๋ณ€์ˆ˜์—๋Š” ์„œ๋ฒ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

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