Rumah  >  Artikel  >  hujung hadapan web  >  Pemalam Pangkalan Data Pertanyaan React: Strategi untuk Pemanasan dan Penghapusan Cache

Pemalam Pangkalan Data Pertanyaan React: Strategi untuk Pemanasan dan Penghapusan Cache

WBOY
WBOYasal
2023-09-29 14:41:06868semak imbas

React Query 数据库插件:实现缓存预热和淘汰的策略

Pemalam Pangkalan Data Pertanyaan React: Strategi untuk melaksanakan pemanasan cache dan pengusiran, contoh kod konkrit diperlukan

Memandangkan kerumitan aplikasi bahagian hadapan moden terus meningkat, pengurusan data dan caching menjadi semakin penting. React Query ialah pustaka pengurusan data yang berkuasa yang membantu kami mengendalikan operasi pengambilan data, caching dan kemas kini dalam aplikasi React. Walau bagaimanapun, React Query menggunakan strategi caching terbina dalam secara lalai Jika kami memerlukan kawalan cache yang lebih maju, seperti strategi pemanasan cache dan pengusiran, kami boleh menggunakan pemalam pangkalan data React Query untuk mencapainya.

Dalam artikel ini, kami akan memperkenalkan cara menggunakan pemalam pangkalan data React Query untuk melaksanakan strategi pemanasan cache dan pengusiran, serta menyediakan contoh kod khusus.

Pertama, kita perlu memasang pemalam pangkalan data React Query dan React Query. Mereka boleh dipasang menggunakan arahan berikut:

npm install react-query react-query-database

Setelah pemasangan selesai, kami boleh memperkenalkan perpustakaan ini dalam aplikasi:

import { QueryClient, QueryClientProvider } from 'react-query';
import { createDatabaseCache } from 'react-query-database';

Seterusnya, kami akan mencipta QueryClient dan menambah pemalam cache pangkalan data kepadanya:

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      cacheTime: 1000 * 60 * 5, // 设置默认缓存时间为 5 分钟
      plugins: [
        createDatabaseCache(), // 添加数据库缓存插件
      ],
    },
  },
});

Sekarang , kami telah berjaya menambah pemalam cache pangkalan data pada QueryClient. Seterusnya, kita boleh menentukan beberapa dasar pemanasan cache dan pengusiran tersuai.

Mula-mula, mari kita lihat cara melaksanakan pemanasan cache. Katakan kami mempunyai permintaan untuk mendapatkan maklumat pengguna:

import { useQuery } from 'react-query';

const fetchUser = async (userId) => {
  // 模拟获取用户信息的异步请求
  const response = await fetch(`/api/users/${userId}`);
  const data = await response.json();
  return data;
};

const UserProfile = ({ userId }) => {
  const { data } = useQuery(['user', userId], () => fetchUser(userId));

  if (data) {
    // 渲染用户信息
  }

  return null;
};

Sekarang kami mahu pramuat beberapa maklumat pengguna ke dalam cache apabila aplikasi mula meningkatkan pengalaman pengguna. Kami boleh menambah kod berikut pada titik masuk aplikasi:

import { useQueryClient } from 'react-query';

const App = () => {
  const queryClient = useQueryClient();

  useEffect(() => {
    const userIds = [1, 2, 3]; // 假设我们要预热的用户 ID 列表

    userIds.forEach((userId) => {
      const queryKey = ['user', userId];
      queryClient.prefetchQuery(queryKey, () => fetchUser(userId));
    });
  }, []);

  return (
    // 应用程序的其他内容
  );
};

Dalam contoh ini, kami mentakrifkan tatasusunan yang mengandungi ID pengguna yang akan dipanaskan dan menggunakan kaedah queryClient.prefetchQuery dalam useEffect untuk memanaskan cache. Fungsi fetchUser akan dipanggil semasa memanaskan badan untuk menyimpan data ke dalam cache. Dengan cara ini, apabila komponen UserProfile perlu memberikan maklumat pengguna, ia akan segera mendapatkan data daripada cache tanpa membuat permintaan rangkaian lain.

Seterusnya, mari kita lihat cara melaksanakan strategi pengusiran cache. Katakan kami mempunyai permintaan untuk mendapatkan senarai artikel:

import { useQuery } from 'react-query';

const fetchArticles = async () => {
  // 模拟获取文章列表的异步请求
  const response = await fetch('/api/articles');
  const data = await response.json();
  return data;
};

const ArticlesList = () => {
  const { data } = useQuery('articles', fetchArticles);

  if (data) {
    // 渲染文章列表
  }

  return null;
};

Secara lalai, strategi cache React Query adalah untuk menyimpan data dalam ingatan dan menghapuskannya secara automatik selepas tempoh masa tertentu. Walau bagaimanapun, kadangkala kita mungkin perlu melaksanakan strategi penyingkiran tersuai. Kita boleh mencapai ini dengan menetapkan parameter staleTime bagi pertanyaan:

const { data } = useQuery('articles', fetchArticles, {
  staleTime: 1000 * 60 * 30, // 设置缓存过期时间为 30 分钟
});

Dalam contoh ini, kami menetapkan masa tamat tempoh cache kepada 30 minit. Apabila data tamat tempoh, React Query akan secara automatik memulakan permintaan baharu untuk mendapatkan data terkini dan mengemas kini cache.

Selain menetapkan masa tamat tempoh cache, kami juga boleh menggunakan parameter cacheTime pertanyaan untuk menetapkan masa maksimum untuk data berada dalam cache. React Query akan memadamkan data daripada cache apabila melebihi masa ini:

const { data } = useQuery('articles', fetchArticles, {
  staleTime: 1000 * 60 * 30, // 设置缓存过期时间为 30 分钟
  cacheTime: 1000 * 60 * 60 * 24, // 设置最长缓存时间为 24 小时
});

Dalam contoh ini, kami menetapkan masa cache maksimum kepada 24 jam. Ini bermakna bahawa data akan dikeluarkan selepas 24 jam, walaupun masa tamat tempoh cache tidak melebihi.

Dengan menggunakan pemalam pangkalan data React Query, kami boleh melaksanakan strategi pemanasan dan penyingkiran cache dengan mudah untuk meningkatkan prestasi aplikasi dan pengalaman pengguna. Dalam artikel ini, kami menerangkan cara memasang dan mengkonfigurasi pemalam pangkalan data React Query dan menyediakan contoh kod khusus untuk pemanasan cache dan pengusiran. Semoga contoh ini akan membantu anda memahami dengan lebih baik dan menggunakan pemalam pangkalan data React Query dan mengoptimumkan aplikasi anda.

Atas ialah kandungan terperinci Pemalam Pangkalan Data Pertanyaan React: Strategi untuk Pemanasan dan Penghapusan Cache. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn