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 . |