Capítulo 101 de 456
'use cache: private' permite acessar APIs de request runtime (cookies(), headers(), searchParams) dentro de um escopo cacheado, mas o resultado nunca é armazenado no servidor: fica só em memória do browser e não sobrevive a reloads. Use quando refatorar para passar dados runtime como argumento não é prático, ou por exigência de compliance que proíbe guardar dado no servidor.
use cache e use cache: remote, que são compartilhados).cookies(), headers(), searchParams funcionam aqui (diferente de use cache puro, onde são proibidas). connection() continua proibido em ambos.import { cookies } from 'next/headers'
import { cacheLife, cacheTag } from 'next/cache'
async function getRecommendations(productId: string) {
'use cache: private'
cacheTag(`recommendations-${productId}`)
cacheLife({ stale: 60 })
// Access cookies within private cache functions
const sessionId = (await cookies()).get('session-id')?.value || 'guest'
return getPersonalizedRecommendations(productId, sessionId)
}
cookies() dentro de um escopo 'use cache: private', algo proibido em 'use cache' normal.| API | Allowed in use cache | Allowed in 'use cache: private' |
|---|---|---|
cookies() | No | Yes |
headers() | No | Yes |
searchParams | No | Yes |
connection() | No | No |
'use cache: private' como cache compartilhado: não é o objetivo, cada entrada é isolada por browser e não persiste, para compartilhamento entre usuários use use cache ou use cache: remote.stale menor que 30s: quebra o prefetch por link; menor que 5 minutos não entra no App Shell.'use cache: private' só quando não dá pra extrair o dado runtime e passar como argumento para um use cache/use cache: remote normal.cacheLife explícito.connection() segue proibido mesmo aqui, é a única API runtime sem exceção entre as três directives de cache.