>  기사  >  웹 프론트엔드  >  React Query에서 데이터 캐싱 및 영구 저장을 구현하는 방법은 무엇입니까?

React Query에서 데이터 캐싱 및 영구 저장을 구현하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-09-26 16:19:53669검색

如何在 React Query 中实现数据缓存和持久化存储?

React Query에서 데이터 캐싱과 영구 저장을 어떻게 구현하나요?

프런트엔드 애플리케이션의 복잡성이 증가함에 따라 데이터 관리가 매우 중요해졌습니다. React Query는 데이터 수집 및 관리를 위한 강력한 도구입니다. 이는 데이터 검색, 캐싱 및 동기화를 단순화하는 방법을 제공하여 효율적이고 유지 관리하기 쉬운 애플리케이션을 신속하게 구축하는 데 도움이 됩니다.

React Query에는 기본적으로 메모리 캐싱 기능이 있지만 페이지를 새로 고치면 캐시된 데이터가 손실됩니다. 이 문제를 해결하려면 캐시 데이터를 로컬 스토리지에 유지해야 합니다. 이 글에서는 React Query에서 데이터 캐싱과 영구 저장을 구현하는 방법을 살펴보겠습니다.

먼저 React Query를 설치해야 합니다.

npm install react-query

다음으로 React Query를 사용하여 데이터를 가져오고 캐시하고 유지하는 방법을 살펴보겠습니다.

import React from 'react';
import { useQuery, QueryClient, QueryClientProvider } from 'react-query';

const queryClient = new QueryClient();

const fetchData = async () => {
  const response = await fetch('https://api.example.com/data');
  return response.json();
};

const DataComponent = () => {
  const { data, isLoading, error } = useQuery('data', fetchData);

  if (isLoading) {
    return <div>Loading...</div>;
  }

  if (error) {
    return <div>Error: {error.message}</div>;
  }

  return (
    <div>
      {data.map((item) => (
        <div key={item.id}>{item.name}</div>
      ))}
    </div>
  );
};

const App = () => {
  return (
    <QueryClientProvider client={queryClient}>
      <DataComponent />
    </QueryClientProvider>
  );
};

export default App;

위 코드에서는 useQuery 후크를 사용하여 데이터를 가져옵니다. 고유 식별자 'data'를 쿼리 키로 전달하고 비동기 함수를 사용하여 fetchData 데이터를 가져옵니다. React Query는 자동으로 데이터를 캐시하고 향후 요청에서 캐시된 데이터를 사용합니다. useQuery 钩子来获取数据。我们传递一个唯一的标识符 'data' 作为查询键,以及一个取数据的异步函数 fetchData。React Query 会自动缓存我们的数据,并在以后的请求中使用缓存数据。

现在,我们来实现数据的持久化存储。我们可以使用 queryClientgetQueryDatasetQueryData 方法来手动缓存和获取数据。同时,我们可以使用 localStorage 或其他类似于 localStorage 的持久化存储方案将数据保存在本地。

const fetchData = async () => {
  const cachedData = queryClient.getQueryData('data');

  if (cachedData) {
    return cachedData;
  }

  const response = await fetch('https://api.example.com/data');
  const data = response.json();

  queryClient.setQueryData('data', data);

  localStorage.setItem('data', JSON.stringify(data));

  return data;
};

const DataComponent = () => {
  const { data, isLoading, error } = useQuery('data', fetchData);

  // ...

  return (
    // ...
  );
};

const App = () => {
  const cachedData = JSON.parse(localStorage.getItem('data'));

  if (cachedData) {
    queryClient.setQueryData('data', cachedData);
  }

  return (
    // ...
  );
};

在上述代码中,我们首先通过 queryClient.getQueryData 方法尝试从缓存中获取数据。如果数据存在,则直接返回缓存的数据,避免重新发起请求。如果数据不存在,则进行正常的数据请求流程,并使用 queryClient.setQueryData 方法将数据缓存起来。

App 组件中,我们首先尝试从本地存储中获取缓存的数据。如果数据存在,则使用 queryClient.setQueryData 方法将数据设置为初始缓存数据。

通过上述代码示例,我们成功实现了在 React Query 中的数据缓存和持久化存储。这使得我们的应用程序能够更高效地管理数据,并在刷新页面后能够恢复之前的状态。

总结:

  • 使用 React Query 可以方便地获取和管理数据。
  • React Query 默认具有内存缓存功能,但刷新页面后,缓存的数据将丢失。
  • 我们可以使用 queryClientgetQueryDatasetQueryData 方法手动缓存和获取数据。
  • 我们可以使用 localStorage 或其他类似于 localStorage
  • 이제 데이터의 영구 저장을 구현해 보겠습니다. queryClientgetQueryDatasetQueryData 메서드를 사용하여 데이터를 수동으로 캐시하고 가져올 수 있습니다. 동시에 localStorage 또는 localStorage와 유사한 기타 영구 저장소 솔루션을 사용하여 데이터를 로컬에 저장할 수 있습니다.
  • rrreee
  • 위 코드에서는 먼저 queryClient.getQueryData 메서드를 통해 캐시에서 데이터를 가져오려고 시도합니다. 데이터가 존재하는 경우 요청을 다시 시작하지 않도록 캐시된 데이터가 직접 반환됩니다. 데이터가 존재하지 않는 경우 일반적인 데이터 요청 프로세스를 진행한 후 queryClient.setQueryData 메소드를 사용하여 데이터를 캐시합니다.
🎜App 구성 요소에서는 먼저 로컬 저장소에서 캐시된 데이터를 가져오려고 시도합니다. 데이터가 존재하는 경우 queryClient.setQueryData 메소드를 사용하여 해당 데이터를 초기 캐시 데이터로 설정합니다. 🎜🎜위의 코드 예시를 통해 React Query에서 데이터 캐싱과 영구 저장을 성공적으로 구현했습니다. 이를 통해 애플리케이션은 데이터를 보다 효율적으로 관리하고 페이지를 새로 고친 후 이전 상태를 복원할 수 있습니다. 🎜🎜요약: 🎜
    🎜React Query를 사용하면 데이터를 쉽게 얻고 관리할 수 있습니다. 🎜🎜React Query에는 기본적으로 메모리 캐싱 기능이 있지만 페이지를 새로 고치면 캐시된 데이터가 손실됩니다. 🎜🎜queryClientgetQueryDatasetQueryData 메서드를 사용하여 수동으로 데이터를 캐시하고 가져올 수 있습니다. 🎜🎜localStorage 또는 localStorage와 유사한 기타 영구 저장소 솔루션을 사용하여 데이터를 로컬에 저장할 수 있습니다. 🎜🎜데이터 캐싱과 영구 저장을 통해 애플리케이션 성능을 향상하고 이전 상태를 복원할 수 있습니다. 🎜🎜

위 내용은 React Query에서 데이터 캐싱 및 영구 저장을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.