You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13 App Router中如何按标签重新验证缓存

Next.js 按标签触发缓存重新验证实现方案

第一步:给getData的请求绑定缓存标签

修改你的getData函数,在fetch请求中添加next.tags配置,把请求缓存和指定标签关联起来:

export default async function getData() {
  const res = await fetch('/api/admin', {
    next: {
      tags: ['admin-data'] // 自定义缓存标签名称,用于后续关联验证
    }
  })

  if (!res.ok) {
    throw new Error('Failed to fetch data')
  }

  return res.json()
}

这样Next.js会将该请求的缓存与admin-data标签绑定,后续只要触发这个标签的重新验证,getData就会重新拉取最新数据。

第二步:在删除函数中触发标签重新验证

根据删除逻辑的位置,分两种场景实现:

场景1:删除逻辑在API路由中

如果删除操作通过API路由处理,直接在路由内调用revalidateTag方法:

// app/api/delete/route.js
import { revalidateTag } from 'next/cache'
import { NextResponse } from 'next/server'

export async function DELETE() {
  // 执行删除数据库数据的业务逻辑
  // ...

  // 触发绑定了admin-data标签的缓存重新验证
  revalidateTag('admin-data')

  return NextResponse.json({ message: '删除成功,缓存已重新验证' })
}

场景2:删除逻辑在服务器组件中

如果删除操作直接在服务器组件内执行,同样可以调用revalidateTag:

// app/admin/page.js
import { revalidateTag } from 'next/cache'

export default async function AdminPage() {
  const handleDelete = async () => {
    // 执行删除操作(比如调用删除API或直接操作数据库)
    await fetch('/api/delete', { method: 'DELETE' })
    
    // 若直接在组件内操作数据库,可直接调用revalidateTag
    // revalidateTag('admin-data')
  }

  return (
    <button onClick={handleDelete}>删除数据</button>
  )
}

核心逻辑说明

  • next.tags:为fetch请求的缓存打上标签,实现缓存的分组管理
  • revalidateTag:调用后会立即清除所有绑定该标签的缓存,下次调用getData时会自动重新发起请求获取最新数据

内容的提问来源于stack exchange,提问作者Htet Ah Yan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:37:05