unstable_cache

Avertissement : Cette API sera remplacée par use cache lorsqu'elle atteindra la stabilité.

unstable_cache vous permet de mettre en cache les résultats d'opérations coûteuses, comme des requêtes de base de données, et de les réutiliser entre plusieurs requêtes.

import { getUser } from './data';
import { unstable_cache } from 'next/cache';

const getCachedUser = unstable_cache(
  async (id) => getUser(id),
  ['my-app-user']
);

export default async function Component({ userID }) {
  const user = await getCachedUser(userID);
  ...
}

Bon à savoir :

  • L'accès à des sources de données dynamiques comme headers ou cookies dans une portée de cache n'est pas pris en charge. Si vous avez besoin de ces données dans une fonction mise en cache, utilisez headers en dehors de la fonction et passez les données dynamiques nécessaires comme argument.
  • Cette API utilise le Cache de données intégré de Next.js pour persister le résultat entre les requêtes et les déploiements.

Paramètres

const data = unstable_cache(fetchData, keyParts, options)()
  • fetchData : Une fonction asynchrone qui récupère les données que vous souhaitez mettre en cache. Elle doit être une fonction qui retourne une Promise.
  • keyParts : Un tableau supplémentaire de clés qui identifient davantage le cache. Par défaut, unstable_cache utilise déjà les arguments et la version sérialisée de votre fonction comme clé de cache. Ce paramètre est optionnel dans la plupart des cas ; vous n'en avez besoin que lorsque vous utilisez des variables externes sans les passer comme paramètres. Cependant, il est important d'ajouter les fermetures utilisées dans la fonction si vous ne les passez pas comme paramètres.
  • options : Un objet qui contrôle le comportement du cache. Il peut contenir les propriétés suivantes :
    • tags : Un tableau d'étiquettes qui peuvent être utilisées pour contrôler l'invalidation du cache. Next.js ne l'utilisera pas pour identifier de manière unique la fonction.
    • revalidate : Le nombre de secondes après lesquelles le cache doit être revalidé. Omettez ou passez false pour mettre en cache indéfiniment ou jusqu'à ce que les méthodes correspondantes revalidateTag() ou revalidatePath() soient appelées.

Retour

unstable_cache retourne une fonction qui, lorsqu'elle est invoquée, retourne une Promise qui se résout en les données mises en cache. Si les données ne sont pas dans le cache, la fonction fournie sera invoquée, et son résultat sera mis en cache et retourné.

Exemple

import { unstable_cache } from 'next/cache'

export default async function Page({
  params,
}: {
  params: Promise<{ userId: string }>
}) {
  const { userId } = await params
  const getCachedUser = unstable_cache(
    async () => {
      return { id: userId }
    },
    [userId], // ajoute l'ID utilisateur à la clé de cache
    {
      tags: ['users'],
      revalidate: 60,
    }
  )

  //...
}

Historique des versions

VersionModifications
v14.0.0Introduction de unstable_cache.

On this page