跳到内容
API 参考函数unstable_cache

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

须知:

  • 不支持在缓存范围内访问动态数据源,如 headerscookies。 如果你需要在缓存函数中使用此数据,请在缓存函数外部使用 headers,并将所需的动态数据作为参数传入。
  • 此 API 使用 Next.js 内置的 数据缓存,以在请求和部署之间持久化结果。

警告:此 API 不稳定,将来可能会发生更改。 如果需要,我们将在 API 稳定时提供迁移文档和 codemod。

参数

const data = unstable_cache(fetchData, keyParts, options)()
  • fetchData:这是一个异步函数,用于获取你要缓存的数据。它必须是一个返回 Promise 的函数。
  • keyParts:这是一个额外的键数组,用于进一步标识缓存。 默认情况下,unstable_cache 已经使用参数和你函数的字符串化版本作为缓存键。 在大多数情况下,它是可选的; 唯一需要使用它的时候是当你使用外部变量而不将它们作为参数传递时。 但是,如果你不将闭包作为参数传递,则添加函数中使用的闭包非常重要。
  • options:这是一个控制缓存行为的对象。 它可以包含以下属性
    • tags:一个标签数组,可用于控制缓存失效。 Next.js 不会使用它来唯一标识函数。
    • revalidate:缓存应在多少秒后重新验证。 省略或传递 false 以无限期缓存,或直到调用匹配的 revalidateTag()revalidatePath() 方法。

返回值

unstable_cache 返回一个函数,当调用该函数时,它会返回一个 Promise,该 Promise 解析为缓存的数据。 如果数据不在缓存中,将调用提供的函数,并且其结果将被缓存并返回。

示例

app/page.tsx
import { unstable_cache } from 'next/cache'
 
export default async function Page({
  params,
}: {
  params: Promise<{ userId: string }>
}) {
  const userId = (await params).userId
  const getCachedUser = unstable_cache(
    async () => {
      return { id: userId }
    },
    [userId], // add the user ID to the cache key
    {
      tags: ['users'],
      revalidate: 60,
    }
  )
 
  //...
}

版本历史

版本变更
v14.0.0引入了 unstable_cache