Next.js 13 App Directory 中的按需重新验证


next.js 13 app directory 中的按需重新验证

本文旨在讲解如何在 Next.js 13 的 App Directory 中实现按需重新验证 (On-Demand Revalidation)。通过 revalidateTag 和 revalidatePath,开发者可以精确控制特定页面或数据标签的缓存失效,从而在数据更新时触发页面重建,避免了全局定时重新构建的低效性。

在 Next.js 13 的 App Directory 中,按需重新验证 (On-Demand Revalidation) 是一种强大的特性,它允许开发者在特定事件发生时,精确地使缓存失效并重新生成页面。这与传统的基于时间的重新验证 (Time-Based Revalidation) 形成对比,后者需要定期重新构建整个站点或特定页面,效率较低。按需重新验证则更加灵活和高效,特别适用于需要实时更新数据的场景,例如博客文章更新、用户资料修改等。

使用 revalidateTag 进行数据标签重新验证

revalidateTag 允许你基于特定的数据标签来使缓存失效。这意味着你可以为你的数据请求添加标签,然后在数据更新时,通过 revalidateTag 来触发所有使用该标签的页面的重新生成。

以下是一个示例,展示了如何使用 revalidateTag 来重新验证用户数据:

// app/page.js
export default async function Page() {
  const user = await fetch("/api/user", { next: { tags: ["user"] } })
    .then(res => res.json());

  return <div>我是 {user.name},我的页面真漂亮</div>;
}

在这个例子中,我们使用 fetch 函数获取用户数据,并使用 next: { tags: ["user"] } 为该请求添加了一个名为 "user" 的标签。这意味着 Next.js 会将这个请求的结果与 "user" 标签关联起来。

接下来,我们需要一个触发重新验证的函数。这通常会在数据更新时被调用,例如在用户资料更新后:

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

export default async function FormPage() {
  const updateUser = async (formData) => {
    'use server';
    const name = formData.get('name');

    // 模拟更新用户数据的 API 调用
    await fetch("/api/user/update", {
      method: 'POST',
      body: JSON.stringify({ name }),
    });

    revalidateTag("user"); // 触发 "user" 标签的重新验证
  };

  return (
    <>
      <form action={updateUser}>
        <input type="text" name="name" />
        <button type="submit">更新用户名</button>
      </form>

      <div>{/* 最新的用户数据将在这里显示 */}</div>
    </>
  );
}

在这个例子中,我们创建了一个名为 updateUser 的 Server Action,它在表单提交时被调用。该函数首先模拟更新用户数据的 API 调用,然后调用 revalidateTag("user") 来触发 "user" 标签的重新验证。这将导致所有使用 "user" 标签的页面(例如上面的 /app/page.js)重新生成,从而显示最新的用户数据。

Facetune Facetune

一款在线照片和视频编辑工具,允许用户创建AI头像

Facetune 109 查看详情 Facetune

关键点:

  • revalidateTag 必须在 Server Actions 或 Route Handlers 中使用。
  • 确保你的数据请求使用了 tags 选项,以便 Next.js 可以正确地跟踪依赖关系。

使用 revalidatePath 进行路径重新验证

revalidatePath 允许你基于特定的路径来使缓存失效。这对于需要在特定页面更新时触发重新生成的场景非常有用。

// app/api/update-blog-post/route.js
import { revalidatePath } from 'next/cache';
import { NextResponse } from 'next/server';

export async function POST(request) {
  // ... 处理博客文章更新的逻辑

  revalidatePath('/blog/[slug]'); // 重新验证 `/blog/[slug]` 路径
  return NextResponse.json({ revalidated: true, now: Date.now() });
}

在这个例子中,我们创建了一个 API 路由 /api/update-blog-post,它处理博客文章的更新。在更新完成后,我们调用 revalidatePath('/blog/[slug]') 来触发 /blog/[slug] 路径的重新验证。这将导致所有匹配该路径的页面(例如 /blog/my-first-post)重新生成,从而显示最新的博客文章内容。

关键点:

  • revalidatePath 必须在 Server Actions 或 Route Handlers 中使用。
  • 你可以使用通配符 [slug] 来匹配动态路由。

注意事项和总结

  • 按需重新验证是 Next.js 13 App Directory 中一项强大的特性,它允许你精确控制缓存失效和页面重新生成。
  • revalidateTag 适用于基于数据标签的重新验证,而 revalidatePath 适用于基于路径的重新验证。
  • 确保在 Server Actions 或 Route Handlers 中使用 revalidateTag 和 revalidatePath。
  • 合理使用按需重新验证可以提高应用程序的性能和用户体验,避免不必要的重新构建。

通过合理利用 revalidateTag 和 revalidatePath,开发者可以构建出更加动态和响应式的 Next.js 应用程序,满足各种实时数据更新的需求。

以上就是Next.js 13 App Directory 中的按需重新验证的详细内容,更多请关注其它相关文章!


# json  # 宁波seo优化化  # 秦皇岛石家庄网站建设  # 天津网站拓客推广公司  # seo原创文章怎么创作  # 营销推广成本计算  # 番禺抖音seo优化文案  # 我是  # 是一个  # 应用程序  # 这将  # 博客  # 鼠标  # 表单  # 适用于  # 在这个  # 按需  # 表单提交  # 路由  # ai  # app  # js  # 顺德页面seo优化代理  # 戏曲网站建设北路小学  # 旅行社营销推广案例范文  # 广告推广营销的文献综述 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  163邮箱网页版官方登录入口 163邮箱网页版访问页面  《合金装备4》有望推出重制版!制作人发话了  Composer reinstall命令重装损坏的包  微信客户端如何找回密码_微信客户端忘记密码找回方法  掌握CSS :has() 选择器:父选择器、嵌套限制与常见陷阱解析  CSS过渡与滚动滚动事件结合应用_scroll与transition动画  PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略  优化 React onClick 事件处理:函数引用与箭头函数的对比  毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明  中大网校app做题记录清除方法  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  《东方财富》条件单关闭方法  J*a中的值传递到底指什么_值传递模型在参数传递中的真正含义说明  汽车之家网页版免费登录_汽车之家官网首页直接进入  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  家里的小飞虫总是不断,用什么方法可以彻底根除?  歌词怎么展示在|直播|间视频号?有什么注意事项?  4399小游戏下装链接 4399小游戏下载链接入口  J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践  鸣潮历史学家灯塔位置一览  掌握产品代码正则表达式:避免常见陷阱与精确匹配  美发店速赢秘籍  火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】  mysql中外键约束如何使用_mysql FOREIGN KEY操作  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  铁路12306入口 铁路12306官网版入口登录网址  哔哩哔哩黑名单怎么查看  《地下城堡4:骑士与破碎编年史》墓穴挑战125攻略  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  基于键值条件高效映射 Pandas DataFrame 多列数据  在Dash应用中自定义HTML标题和网站图标  苹果自助维修计划支持哪些设备机型  电脑视频号|直播|如何分享屏幕  什么是Satis,如何用它搭建一个私有的composer仓库?  qq音乐官方网站入口_qq音乐在线听歌网页版链接  126邮箱网页在线登录2025_126邮箱网页版入口官方地址  纯CSS实现滚动时动态时间轴线条颜色填充效果  Golang如何初始化module项目_Golang module init使用说明  喜茶GO更换登录账号方法  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  《盗墓笔记手游》技能介绍  哈尔滨城市通昵称修改方法  《大润发优鲜》充值方法介绍  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  139邮箱登录入口官网 139邮箱登录入口官网网址  网易云音乐闹钟铃声设置教程 

 2025-10-11

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.