cacheTag

La función cacheTag le permite etiquetar datos en caché para su invalidación bajo demanda. Al asociar etiquetas con entradas de caché, puede purgar o revalidar selectivamente entradas específicas sin afectar otros datos almacenados en caché.

Uso

Para usar cacheTag, active la bandera dynamicIO en su archivo next.config.js:

import type { NextConfig } from 'next'

const nextConfig: NextConfig = {
  experimental: {
    dynamicIO: true,
  },
}

export default nextConfig

La función cacheTag acepta un único valor de cadena o un arreglo de cadenas.

import { unstable_cacheTag as cacheTag } from 'next/cache'

export async function getData() {
  'use cache'
  cacheTag('my-data')
  const data = await fetch('/api/data')
  return data
}

Luego puede purgar la caché bajo demanda usando la API revalidateTag en otra función, por ejemplo, un manejador de ruta o una Acción de Servidor:

'use server'

import { revalidateTag } from 'next/cache'

export default async function submit() {
  await addPost()
  revalidateTag('my-data')
}

Aspectos importantes

  • Etiquetas idempotentes: Aplicar la misma etiqueta múltiples veces no tiene efecto adicional.
  • Múltiples etiquetas: Puede asignar varias etiquetas a una sola entrada de caché pasando un arreglo a cacheTag.
cacheTag('tag-one', 'tag-two')

Ejemplos

Etiquetado de componentes o funciones

Etiquete sus datos en caché llamando a cacheTag dentro de una función o componente en caché:

import { unstable_cacheTag as cacheTag } from 'next/cache'

interface BookingsProps {
  type: string
}

export async function Bookings({ type = 'haircut' }: BookingsProps) {
  'use cache'
  cacheTag('bookings-data')

  async function getBookingsData() {
    const data = await fetch(`/api/bookings?type=${encodeURIComponent(type)}`)
    return data
  }

  return //...
}

Creación de etiquetas a partir de datos externos

Puede usar los datos devueltos por una función asíncrona para etiquetar la entrada de caché.

import { unstable_cacheTag as cacheTag } from 'next/cache'

interface BookingsProps {
  type: string
}

export async function Bookings({ type = 'haircut' }: BookingsProps) {
  async function getBookingsData() {
    'use cache'
    const data = await fetch(`/api/bookings?type=${encodeURIComponent(type)}`)
    cacheTag('bookings-data', data.id)
    return data
  }
  return //...
}

Invalidación de caché etiquetada

Usando revalidateTag, puede invalidar la caché para una etiqueta específica cuando sea necesario:

'use server'

import { revalidateTag } from 'next/cache'

export async function updateBookings() {
  await updateBookingData()
  revalidateTag('bookings-data')
}

On this page