> 웹 프론트엔드 > JS 튜토리얼 > useEffect에서 React 쿼리까지: 반응으로 데이터 관리 현대화

useEffect에서 React 쿼리까지: 반응으로 데이터 관리 현대화

Mary-Kate Olsen
풀어 주다: 2024-11-22 07:50:17
원래의
828명이 탐색했습니다.

From useEffect to React Query: Modernizing your data management in react

현대 웹 개발 환경에서는 서버 측 데이터를 효율적으로 관리하는 빠르고 반응성이 뛰어난 애플리케이션을 구축하는 것이 그 어느 때보다 중요합니다. 특히 useEffect를 사용하여 React에서 데이터를 가져오는 전통적인 방법은 종종 복잡한 상태 관리, 반복적인 코드 및 성능 문제로 이어질 수 있습니다. React Query를 사용하면 개발자는 자동 캐싱, 백그라운드 가져오기, 내장된 변형 지원과 같은 기능을 활용하는 동시에 상용구 코드를 최소화할 수 있습니다.

이 기사에서는 React Query의 핵심 개념을 살펴보고, 이를 프로젝트에 통합하는 방법을 시연하고, 개발 작업 흐름을 크게 개선할 수 있는 강력한 기능을 강조하겠습니다. React 애플리케이션에서 데이터를 가져오고, 캐시하고, 동기화하는 방식을 변화시킬 준비를 하세요!

React Effects를 사용하여 데이터 가져오기를 중지해야 하는 이유

데이터 가져오기에 React의 useEffect를 사용하는 것은 완벽하게 유효하지만, React Query와 같은 전용 데이터 가져오기 라이브러리를 선호하여 이 사용에서 벗어나야 할 몇 가지 이유가 있습니다(React 문서에서도 데이터 가져오기에 React Query 사용을 제안함).

데이터 가져오기에 효과를 사용할 때의 몇 가지 단점:

  • 성능 문제: "네트워크 워터폴"과 불필요한 다시 가져오기는 React useEffect를 사용할 때 흔히 발생하는 문제 중 일부이며 매우 나쁜 사용자 경험으로 이어질 수 있습니다.
  • 내장 캐싱 부족: useEffect는 기본적으로 캐싱을 제공하지 않으므로 반복적인 네트워크 요청이 발생하고 이를 관리하기 위한 복잡한 솔루션이 발생합니다.
  • 상태 관리의 복잡성: useEffect를 사용하여 로드, 오류 및 데이터 상태를 수동으로 관리하면 특히 애플리케이션이 확장될 때 번거롭고 오류가 발생하기 쉬운 코드가 발생할 수 있습니다.
  • 효과가 서버에서 실행되지 않습니다: 구성 요소가 처음 렌더링될 때 데이터를 사용하지 못할 수 있습니다.

React 쿼리의 작동 방식

React Query는 React 애플리케이션에서 데이터 가져오기 및 상태 관리를 단순화하도록 설계된 강력한 라이브러리입니다. React Query의 작동 방식은 다음과 같습니다.

1. 데이터 쿼리

  • useQuery 후크: React Query의 핵심은 useQuery 후크입니다. 이 후크를 사용하면 서버에서 데이터를 가져오고 해당 상태(로드, 오류, 데이터…)를 자동으로 관리할 수 있습니다.
  • 쿼리 키: 각 쿼리는 고유 키(배열에 있는 하나 이상의 문자열)로 식별됩니다. 이 키는 React Query가 데이터를 효율적으로 캐시하고 관리하는 데 도움이 됩니다.

2. 캐싱

  • 자동 캐싱: 데이터를 가져오면 React Query가 이를 캐시합니다. 동일한 쿼리가 다시 수행되면 새로운 네트워크 요청이 아닌 캐시에서 데이터를 검색합니다.
  • 오래된 데이터 관리: 데이터가 최신(오래되지 않음)으로 간주되는 기간을 정의할 수 있습니다. 이 기간이 지나면 React Query는 백그라운드에서 데이터를 다시 가져옵니다.

3. 백그라운드 다시 가져오기

React Query는 여러 시나리오에서 데이터를 자동으로 다시 가져와 데이터를 최신 상태로 동기화합니다. 이런 일이 발생하는 주요 상황은 다음과 같습니다.

  • 구성요소 마운트: 구성요소가 마운트될 때 데이터가 오래된 것으로 간주되는 경우.
  • 창 포커스: 사용자가 탭이나 창 사이를 전환하고 애플리케이션이 포함된 창으로 돌아갈 때와 같이 창이 포커스를 다시 얻을 때마다.
  • 네트워크 재연결: 네트워크 연결이 끊어졌다가 나중에 복원되는 경우

4. 데이터 돌연변이

  • useMutation Hook: 서버에서 데이터를 생성, 업데이트, 삭제하는 과정을 말합니다. 데이터를 검색하는 쿼리와 달리 useMutation은 데이터를 수정하고 그에 따른 부작용을 관리하는 데 사용됩니다.
  • 낙관적 업데이트: 사용자가 데이터를 변경하는 작업을 수행하면 해당 작업의 예상 결과를 반영하여 UI가 즉시 업데이트되어 사용자 경험이 향상됩니다.

5. 쿼리 무효화

  • React 쿼리를 사용하면 캐시된 쿼리를 "오래됨"으로 표시하여 다음에 액세스할 때 다시 가져올 수 있습니다. 이는 변형이나 사용자 상호 작용과 같은 특정 작업 후에 UI가 서버의 최신 데이터를 반영하도록 하는 데 필수적입니다.

6. 자동 쓰레기 수거

  • React Query는 더 이상 사용되지 않고 특정 기간 동안 비활성화된 쿼리를 캐시에서 자동으로 제거합니다. 이 프로세스는 메모리 누수를 방지하고 관련 데이터만 캐시에 유지되도록 합니다.

7. 개발자 도구

  • React Query DevTools는 개발자가 쿼리, 변형 및 캐시 상태를 디버그하고 모니터링하는 데 도움이 되는 선택적이고 사용자 친화적인 React Query용 도구입니다. 이는 쿼리의 세부 사항을 검사하고 React 쿼리가 수명 주기를 관리하는 방법을 확인할 수 있는 시각적 인터페이스를 제공합니다.

8. 서버 측 렌더링(SSR)

  • React Query는 서버 측 렌더링(SSR)을 지원합니다. 이는 클라이언트에 데이터를 보내기 전에 서버에서 데이터를 미리 가져오는 데 도움이 됩니다. 이렇게 하면 초기 페이지 로드 속도가 빨라지고 완전히 렌더링된 페이지를 검색 엔진에 제공하여 SEO를 향상할 수 있습니다.

React 쿼리 구현 방법

다음은 React 쿼리를 사용하여 React 앱에서 서버 데이터 가져오기, 캐싱, 업데이트 및 동기화를 관리하는 방법에 대한 단계별 가이드입니다.

1단계: React 쿼리 설치

먼저 프로젝트에 React Query를 추가하세요.

npm install @tanstack/react-query
로그인 후 복사
로그인 후 복사

2단계: QueryClientProvider 설정

React Query를 구성하려면 앱을 QueryClientProvider로 래핑하세요. 이 공급자는 캐싱, 백그라운드 가져오기 및 업데이트를 관리하는 QueryClient 인스턴스를 사용합니다.

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

const queryClient = new QueryClient();

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <YourComponent />
    </QueryClientProvider>
  );
}
로그인 후 복사
로그인 후 복사

3단계: useQuery를 사용하여 데이터 가져오기

useQuery 후크는 API에서 데이터를 가져와 자동으로 캐시하고 로드 및 오류와 같은 상태를 처리합니다.

npm install @tanstack/react-query
로그인 후 복사
로그인 후 복사
  • 키(['todos']): 각 useQuery에는 데이터를 식별하고 캐시하기 위한 고유 키가 필요합니다.
  • 쿼리 함수(fetchTodos): 이 비동기 함수는 API에서 필요한 데이터를 가져옵니다.

4단계: useMutation을 사용하여 데이터 변형 처리

useMutation 후크는 데이터를 생성, 업데이트 또는 삭제하는 데 사용됩니다. 변형이 성공하면 쿼리 무효화를 사용하여 관련 데이터를 다시 가져오고 앱 상태를 최신 상태로 유지할 수 있습니다.

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

const queryClient = new QueryClient();

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <YourComponent />
    </QueryClientProvider>
  );
}
로그인 후 복사
로그인 후 복사
  • Mutation 함수(addTodo): 이 비동기 함수는 서버 상태를 수정합니다.
  • onSuccess: 변형 후 이 콜백은 ['todos'] 쿼리를 무효화하고 새로 추가된 할일을 표시하기 위해 데이터를 다시 가져오고 업데이트합니다.

5단계: 디버깅을 위한 선택적 DevTools

React Query DevTools는 개발 중에 쿼리, 캐시 상태 등을 모니터링하는 데 도움이 될 수 있습니다.

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

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

  if (isLoading) return <p>Loading...</p>;
  if (error) return <p>Error: {error.message}</p>;

  return (
    <div>
      {data.map((todo) => (
        <p key={todo.id}>{todo.title}</p>
      ))}
    </div>
  );
}

// Sample fetch function
const fetchTodos = async () => {
  const response = await fetch('/api/todos');
  return response.json();
};
로그인 후 복사

그런 다음 앱에:

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

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

  return (
    <button onClick={() => addTodoMutation.mutate({ title: 'New Todo' })}>
      Add Todo
    </button>
  );
}

const addTodo = async (newTodo) => {
  const response = await fetch('/api/todos', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(newTodo),
  });
  return response.json();
};
로그인 후 복사

결론

useEffect를 데이터 가져오기 및 부작용을 위한 React Query로 바꾸는 것은 최신 React 애플리케이션을 구축하는 데 큰 권장 사항입니다.

React Query는 React 앱에서 서버 측 데이터를 처리하는 방식을 변화시켜 복잡한 상태 관리를 단순화하는 보다 선언적인 접근 방식을 제공합니다. 캐싱, 백그라운드 동기화, 쿼리 무효화와 같은 강력한 기능을 활용하면 응답성이 뛰어나고 성능이 뛰어난 애플리케이션을 만들 수 있습니다. 마지막으로, React Query DevTools를 통합하면 모니터링 및 디버깅이 쉬워지고 앱의 데이터 흐름이 원활하고 투명해집니다.

단순한 단일 페이지 앱을 구축하든 복잡한 데이터 집약적 애플리케이션을 구축하든, React Query를 사용하면 더 적은 노력으로 더 빠르고 스마트하며 사용자 친화적인 앱을 구축할 수 있습니다.

위 내용은 useEffect에서 React 쿼리까지: 반응으로 데이터 관리 현대화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿