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は、Next.jsに組み込まれているデータキャッシュを使用して、リクエストとデプロイ間で結果を永続化します。
警告: このAPIは不安定であり、将来変更される可能性があります。このAPIが安定する際には、必要に応じて移行ドキュメントとCodemodsを提供します。
パラメータ
const data = unstable_cache(fetchData, keyParts, options)()
fetchData
: これはキャッシュしたいデータをフェッチする非同期関数です。Promise
を返す関数である必要があります。keyParts
: これは、キャッシュに識別情報を追加するための追加のキーの配列です。デフォルトでは、unstable_cache
はすでに引数と関数の文字列化されたバージョンをキャッシュキーとして使用します。ほとんどの場合、これはオプションです。これを使用する必要があるのは、外部変数をパラメータとして渡さずに使用する場合のみです。ただし、関数内で使用されるクロージャをパラメータとして渡さない場合は、それらを追加することが重要です。options
: これはキャッシュの動作を制御するオブジェクトです。以下のプロパティを含めることができます。tags
: キャッシュの無効化を制御するために使用できるタグの配列です。Next.jsはこれを関数のユニークな識別には使用しません。revalidate
: キャッシュが再検証されるまでの秒数です。省略するか、false
を渡すと、無期限に、または一致するrevalidateTag()
またはrevalidatePath()
メソッドが呼び出されるまでキャッシュされます。
戻り値
unstable_cache
は、呼び出されるとキャッシュされたデータに解決されるPromiseを返す関数を返します。データがキャッシュにない場合、提供された関数が呼び出され、その結果がキャッシュされて返されます。
例
app/page.tsx
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], // add the user ID to the cache key
{
tags: ['users'],
revalidate: 60,
}
)
//...
}
バージョン履歴
バージョン | 変更点 |
---|---|
v14.0.0 | unstable_cache が導入されました。 |
お役に立ちましたか?