Programming

[TIL] React Query

jay-dev 2023. 7. 11. 01:20

[TanStack Query 공식 문서]

 

Overview | TanStack Query Docs

TanStack Query (FKA React Query) is often described as the missing data-fetching library for web applications, but in more technical terms, it makes fetching, caching, synchronizing and updating server state in your web applications a breeze. Motivation

tanstack.com

React Query의 장점

- 코드의 양이 적고 구조가 단순하여 유지보수에 용이

- 캐싱을 통해 애플리케이션 속도 향상

- 데이터 중복 요청 제거

- 데이터 상태 파악 후 updating 지원

- React Hooks와 유사한 인터페이스 제공

- Garbage Collection을 이용하여 서버 쪽 데이터 메모리 관리

- 비동기 과정을 선언적으로 관리

Install

yarn add @tanstack/react-query

Quick Start

import {
  useQuery,
  useMutation,
  useQueryClient,
  QueryClient,
  QueryClientProvider,
} from '@tanstack/react-query'
import { getTodos, postTodo } from '../my-api'

// Create a client
const queryClient = new QueryClient()

function App() {
  return (
    // Provide the client to your App
    <QueryClientProvider client={queryClient}>
      <Todos />
    </QueryClientProvider>
  )
}

function Todos() {
  // Access the client
  const queryClient = useQueryClient()

  // Queries
  const query = useQuery({ queryKey: ['todos'], queryFn: getTodos })

  // Mutations
  const mutation = useMutation({
    mutationFn: postTodo,
    onSuccess: () => {
      // Invalidate and refetch
      queryClient.invalidateQueries({ queryKey: ['todos'] })
    },
  })

  return (
    <div>
      <ul>
        {query.data?.map((todo) => (
          <li key={todo.id}>{todo.title}</li>
        ))}
      </ul>

      <button
        onClick={() => {
          mutation.mutate({
            id: Date.now(),
            title: 'Do Laundry',
          })
        }}
      >
        Add Todo
      </button>
    </div>
  )
}

render(<App />, document.getElementById('root'))

사용할 루트 컴포넌트 (App.js)를 QueryClientProvider로 감싸고

변수에 담은 QueryClient를 적용,

전체 컴포넌트에서 React-Query를 사용할 수 있게 함

 

사용할 컴포넌트에서

useQuery, useMutation 등으로 호출

'Programming' 카테고리의 다른 글

[TIL] window.location / useNavigate 차이  (3) 2023.07.14
[TIL] React Portal을 사용해 Modal 만들기  (0) 2023.07.12
[TIL] React Hooks  (1) 2023.07.09
[WIL] week4 회고  (0) 2023.07.09
Redux  (0) 2023.07.04