본문 바로가기
React

React에서 React Query 사용법

by 굿센스굿 2024. 12. 13.
반응형

 

React Query는 클라이언트 상태 관리 및 서버 상태 관리를 간편하게 할 수 있도록 도와주는 강력한 라이브러리입니다. 이 글에서는 React Query의 기본 개념과 사용법을 살펴보고, 주요 기능과 코드 예제를 통해 실제로 어떻게 활용할 수 있는지 상세히 설명하겠습니다.

1. React Query란 무엇인가?

React Query는 서버에서 데이터를 가져오고, 캐싱하고, 동기화하며 업데이트를 관리하는 데 초점을 맞춘 라이브러리입니다. 데이터 패칭을 단순화하고 클라이언트와 서버 간 상태 관리를 보다 효율적으로 처리할 수 있게 해줍니다.

주요 특징

  • 자동 캐싱: 데이터를 요청하면 자동으로 캐싱되어 성능이 향상됩니다.
  • 자동 리페치: 데이터가 변경될 때 실시간으로 리페치하여 최신 상태를 유지합니다.
  • 백그라운드 동기화: 앱이 포커스될 때 또는 네트워크 상태가 변경될 때 데이터를 자동으로 동기화합니다.
  • 사용자 정의 가능한 쿼리: 원하는 대로 쿼리 동작을 제어할 수 있습니다.

2. React Query 설치 및 초기 설정

설치

React Query를 사용하려면 먼저 프로젝트에 설치해야 합니다. 아래 명령어를 실행하세요:

npm install @tanstack/react-query

또한, 개발 환경에서 React Query Devtools를 사용하면 쿼리 상태를 시각적으로 확인할 수 있어 유용합니다:

npm install @tanstack/react-query-devtools

기본 설정

React Query를 사용하려면 QueryClientQueryClientProvider를 설정해야 합니다.

import React from 'react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

const queryClient = new QueryClient();

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <YourComponent />
    </QueryClientProvider>
  );
}

export default App;

3. React Query의 주요 기능

3.1 데이터 가져오기 (useQuery)

useQuery 훅은 데이터를 가져오는 가장 기본적인 방법입니다. 서버에서 데이터를 비동기로 가져오고, 이를 자동으로 캐싱하고 관리합니다.

사용 예제

import { useQuery } from '@tanstack/react-query';

function fetchTodos() {
  return fetch('https://jsonplaceholder.typicode.com/todos').then(res => res.json());
}

function Todos() {
  const { data, isLoading, error } = useQuery(['todos'], fetchTodos);

  if (isLoading) return

Loading...

;
  if (error) return

Error: {error.message}

;

  return (
    {data.map(todo => (
  • {todo.title}
  • ))}

  );
}

주요 옵션

  • queryKey: 쿼리를 식별하는 고유 키입니다.
  • queryFn: 데이터를 가져오는 함수입니다.
  • staleTime: 데이터가 신선한 상태로 유지되는 시간입니다.

3.2 데이터 변이 (useMutation)

useMutation 훅은 데이터를 생성, 수정, 삭제할 때 사용됩니다. 주로 서버 상태를 변경하는 작업에 사용됩니다.

사용 예제

import { useMutation, useQueryClient } from '@tanstack/react-query';

function addTodo(newTodo) {
  return fetch('https://jsonplaceholder.typicode.com/todos', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(newTodo),
  }).then(res => res.json());
}

function TodoForm() {
  const queryClient = useQueryClient();
  const mutation = useMutation(addTodo, {
    onSuccess: () => {
      queryClient.invalidateQueries(['todos']);
    },
  });

  const handleSubmit = () => {
    mutation.mutate({ title: 'New Todo', completed: false });
  };

  return (
    
      Add Todo
    
  );
}

주요 옵션

  • onSuccess: 성공 시 실행되는 콜백 함수입니다.
  • onError: 오류 발생 시 실행되는 콜백 함수입니다.
  • onSettled: 성공 또는 실패 후 항상 실행됩니다.

3.3 쿼리 무효화

React Query는 데이터가 변경되었을 때 기존 데이터를 무효화하고 새 데이터를 가져옵니다. useQueryClientinvalidateQueries 메서드를 활용하면 특정 쿼리를 갱신할 수 있습니다.

사용 예제

const queryClient = useQueryClient();
queryClient.invalidateQueries(['todos']);

4. 고급 사용법

4.1 Pagination (페이지네이션)

React Query는 페이지네이션 처리도 간단하게 구현할 수 있습니다. useQuery 훅을 활용해 페이지 번호를 기반으로 데이터를 가져오도록 설정합니다.

function fetchTodos(page) {
  return fetch(`https://jsonplaceholder.typicode.com/todos?_page=${page}`).then(res => res.json());
}

function PaginatedTodos() {
  const [page, setPage] = React.useState(1);
  const { data, isLoading } = useQuery(['todos', page], () => fetchTodos(page));

  if (isLoading) return

Loading...

;

  return (
    {data.map(todo => (
  • {todo.title}
  • ))}

  );
}

4.2 Optimistic Updates (낙관적 업데이트)

useMutation을 활용해 서버 응답을 기다리지 않고 클라이언트에서 상태를 즉시 업데이트할 수 있습니다.

const mutation = useMutation(updateTodo, {
  onMutate: async (newTodo) => {
    await queryClient.cancelQueries(['todos']);
    const previousTodos = queryClient.getQueryData(['todos']);
    queryClient.setQueryData(['todos'], old =>
      old.map(todo => (todo.id === newTodo.id ? { ...todo, ...newTodo } : todo))
    );
    return { previousTodos };
  },
  onError: (err, newTodo, context) => {
    queryClient.setQueryData(['todos'], context.previousTodos);
  },
});

5. 결론

React Query는 서버 상태 관리를 간소화하고 사용자 경험을 개선할 수 있는 강력한 도구입니다. 이 글에서 다룬 기본 사용법과 고급 기능을 활용하면 더욱 효율적으로 React 애플리케이션을 개발할 수 있습니다. React Query를 통해 데이터 패칭과 상태 관리를 최적화해보세요!

반응형

'React' 카테고리의 다른 글

React에서 GraphQL 사용법  (0) 2024.12.13
React에서 Axios를 통한 데이터 처리  (0) 2024.12.13
React에서 Yup을 이용한 유효성 검사  (0) 2024.12.13
React에서 Formik 사용법  (0) 2024.12.13
React에서 React Hook Form 사용법  (0) 2024.12.13