Maison > interface Web > js tutoriel > Mettez en cache votre récupérateur dans useSWR avec useCallback.

Mettez en cache votre récupérateur dans useSWR avec useCallback.

王林
Libérer: 2024-07-30 06:43:03
original
990 Les gens l'ont consulté

J'ai trouvé un moyen de mettre en cache le récupérateur dans useSWR en utilisant useCallback dans le code source de Gitroom.

Cache your fetcher in useSWR with useCallback.

L'image ci-dessus provient de platform-analytics/render.analytics.tsx. Essayons de comprendre cet extrait de code.

nous explorerons comment optimiser la récupération de données dans vos applications React à l'aide du hook useCallback en combinaison avec useSWR. Nous allons décomposer l'extrait de code fourni et expliquer pourquoi la mise en cache de votre fonction de récupération est importante.

Comprendre le code

Plongeons dans le code étape par étape :

const load = useCallback(async () => {
  setLoading(true);
  const load = (
    await fetch(\`/analytics/${integration.id}?date=${date}\`)
  ).json();
  setLoading(false);
  return load;
}, \[integration, date\]);
Copier après la connexion

Ici, nous définissons un chargement de fonction asynchrone à l'intérieur d'un hook useCallback. Cette fonction récupère les données d'un point de terminaison spécifié et gère l'état de chargement. Le hook useCallback garantit que cette fonction est mémorisée et recréée uniquement lorsque les dépendances (intégration et date) changent.

Ensuite, nous utilisons useSWR pour gérer la récupération des données :

const { data } = useSWR(\`/analytics-${integration?.id}-${date}\`, load, {
  refreshInterval: 0,
  refreshWhenHidden: false,
  revalidateOnFocus: false,
  revalidateOnReconnect: false,
  revalidateIfStale: false,
  refreshWhenOffline: false,
  revalidateOnMount: true,
});
Copier après la connexion

Ici, useSWR est configuré avec une clé (/analytics-${integration?.id}-${date}) et notre fonction de chargement mémorisé. Les options de configuration contrôlent le comportement de revalidation des données.

Comment useCallback empêche les récupérations inutiles

Pour comprendre comment useCallback empêche les récupérations inutiles, nous devons examiner comment React gère les références de fonction et comment fonctionne useSWR.

Références de fonctions dans React

Dans React, chaque fois qu'un composant est restitué, toutes les fonctions définies en son sein sont recréées. Cela signifie que sans useCallback, une nouvelle instance de votre fonction de chargement serait créée à chaque rendu.

Cache your fetcher in useSWR with useCallback.

Impact sur l'utilisationSWR

useSWR est une bibliothèque de récupération de données pour React. Il utilise une clé pour identifier les données et une fonction de récupération pour les récupérer. useSWR s'appuie sur la stabilité de la référence de la fonction de récupération. Si la référence change, useSWR peut interpréter cela comme un signal indiquant que les données doivent être récupérées, même si la logique réelle de l'outil de récupération n'a pas changé.

Voici une explication détaillée :

  1. Sans useCallback :
const load = async () => {
  setLoading(true);
  const load = (
    await fetch(\`/analytics/${integration.id}?date=${date}\`)
  ).json();
  setLoading(false);
  return load;
};

const { data } = useSWR(\`/analytics-${integration?.id}-${date}\`, load, {
  refreshInterval: 0,
  refreshWhenHidden: false,
  revalidateOnFocus: false,
  revalidateOnReconnect: false,
  revalidateIfStale: false,
  refreshWhenOffline: false,
  revalidateOnMount: true,
});
Copier après la connexion

Dans ce cas, chaque rendu crée une nouvelle fonction de chargement. useSWR voit une référence de fonction différente à chaque fois, ce qui peut conduire à des récupérations inutiles même lorsque l'intégration et la date n'ont pas changé.

Avec useCallback :

const load = useCallback(async () => {
  setLoading(true);
  const load = (
    await fetch(\`/analytics/${integration.id}?date=${date}\`)
  ).json();
  setLoading(false);
  return load;
}, \[integration, date\]);

const { data } = useSWR(\`/analytics-${integration?.id}-${date}\`, load, {
  refreshInterval: 0,
  refreshWhenHidden: false,
  revalidateOnFocus: false,
  revalidateOnReconnect: false,
  revalidateIfStale: false,
  refreshWhenOffline: false,
  revalidateOnMount: true,
});
Copier après la connexion

En encapsulant la fonction load dans useCallback, nous nous assurons qu'elle n'est recréée que lorsque ses dépendances (intégration et date) changent. Cette stabilité dans la référence de fonction indique à useSWR que la fonction de récupération n'a pas changé à moins que l'intégration ou la date ne change, évitant ainsi les nouvelles récupérations inutiles.

Vous voulez apprendre à créer shadcn-ui/ui à partir de zéro ? Découvrez construire à partir de zéro

Sur moi:

Site Internet : https://ramunarasinga.com/

Linkedin : https://www.linkedin.com/in/ramu-narasinga-189361128/

Github : https://github.com/Ramu-Narasinga

Email : ramu.narasinga@gmail.com

Construisez shadcn-ui/ui à partir de zéro

Références :

  1. https://github.com/gitroomhq/gitroom/blob/c03b96215fa30b267a97d7eafc2281f482a3192f/apps/frontend/src/components/platform-analytics/render.analytics.tsx#L25
  2. https://github.com/search?q=repo%3Agitroomhq%2Fgitroom%20useSWR&type=code
  3. https://swr.vercel.app/docs/getting-started
  4. https://react.dev/reference/react/useCallback

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal