unstable_cache

Предупреждение: Этот API будет заменён директивой use cache после достижения стабильности.

unstable_cache позволяет кэшировать результаты ресурсоёмких операций, таких как запросы к базе данных, и повторно использовать их между несколькими запросами.

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);
  ...
}

Полезно знать:

  • Доступ к динамическим источникам данных, таким как headers или cookies, внутри области кэширования не поддерживается. Если вам нужны эти данные внутри кэшированной функции, используйте headers вне её и передавайте необходимые динамические данные в качестве аргументов.
  • Этот API использует встроенный Кэш данных (Data Cache) Next.js для сохранения результатов между запросами и деплоями.

Параметры

const data = unstable_cache(fetchData, keyParts, options)()
  • fetchData: Асинхронная функция, которая получает данные для кэширования. Должна возвращать Promise.
  • keyParts: Дополнительный массив ключей для более точной идентификации кэша. По умолчанию unstable_cache уже использует аргументы и строковое представление функции в качестве ключа кэша. В большинстве случаев этот параметр необязателен; он нужен только при использовании внешних переменных без передачи их в качестве параметров. Однако важно добавлять замыкания, используемые внутри функции, если они не передаются как параметры.
  • options: Объект, управляющий поведением кэша. Может содержать следующие свойства:
    • tags: Массив тегов для управления инвалидацией кэша. Next.js не использует их для уникальной идентификации функции.
    • revalidate: Количество секунд, через которое кэш должен быть обновлён. Пропустите или укажите false для бессрочного кэширования до вызова соответствующих методов revalidateTag() или revalidatePath().

Возвращаемое значение

unstable_cache возвращает функцию, которая при вызове возвращает Promise с закэшированными данными. Если данные отсутствуют в кэше, будет вызвана переданная функция, а её результат будет закэширован и возвращён.

Пример

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], // добавляем ID пользователя к ключу кэша
    {
      tags: ['users'],
      revalidate: 60,
    }
  )

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

export default async function Page({ params } }) {
  const { userId } = await params
  const getCachedUser = unstable_cache(
    async () => {
      return { id: userId };
    },
    [userId], // добавляем ID пользователя к ключу кэша
    {
      tags: ["users"],
      revalidate: 60,
    }
  );

  //...
}

История версий

ВерсияИзменения
v14.0.0Добавлена функция unstable_cache.