unstable_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は不安定で、将来変更される可能性があります。APIが安定化する際には、必要に応じて移行ドキュメントとコードモッドを提供します。

パラメータ

const data = unstable_cache(fetchData, keyParts, options)()
  • fetchData: キャッシュしたいデータを取得する非同期関数。Promise を返す関数である必要があります。
  • keyParts: キャッシュキーを識別する配列。キャッシュされるデータのキーを一意に識別するグローバルにユニークな値を含める必要があります。キャッシュキーには関数に渡される引数も含まれます。
  • options: キャッシュの動作を制御するオブジェクト。以下のプロパティを含めることができます:
    • tags: キャッシュの無効化を制御するために使用できるタグの配列。
    • revalidate: キャッシュを再検証するまでの秒数。省略するか false を渡すと、無期限にキャッシュされるか、revalidateTag() または revalidatePath() メソッドが呼び出されるまでキャッシュされます。

戻り値

unstable_cache は、呼び出されるとキャッシュされたデータに解決される Promise を返す関数を返します。データがキャッシュにない場合、提供された関数が呼び出され、その結果がキャッシュされて返されます。

バージョン履歴

バージョン変更内容
v14.0.0unstable_cache が導入されました。