news 2026/4/28 16:39:54

Next.js路由段配置选项笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Next.js路由段配置选项笔记

来是想发昨晚写好的 starblog 管理后台重构文章的

结果打开 blog 才发现忘记提交了😂

所以写一篇新的吧

正好最近正在大量使用 Next.js

我发现部署后的首次渲染很慢,才意识到「预热」这个问题

当然这是后话了

这个框架里有大量的官方约定

这些在官方文档里都有的,就是比较分散,本文主要是概括一下这些约定

Next.js框架更新得很快,不一样的地方以官方文档为主。

缓存和渲染相关#

// 控制页面重新验证的时间间隔(秒)

export const revalidate = 60; // 60秒后重新验证

export const revalidate = 0; // 禁用缓存

export const revalidate = false; // 永久缓存

// 控制页面的渲染模式

export const dynamic = 'auto'; // 默认,自动选择

export const dynamic = 'force-dynamic'; // 强制动态渲染

export const dynamic = 'force-static'; // 强制静态渲染

export const dynamic = 'error'; // 如果使用动态函数则报错

// 控制动态段的行为

export const dynamicParams = true; // 允许动态参数(默认)

export const dynamicParams = false; // 不允许动态参数

运行时配置#

// 指定运行时环境

export const runtime = 'nodejs'; // Node.js 运行时(默认)

export const runtime = 'edge'; // Edge 运行时

// 设置最大执行时间(秒)

export const maxDuration = 30; // 最多执行30秒

获取数据相关#

// 控制 fetch 请求的缓存行为

export const fetchCache = 'auto'; // 默认缓存行为

export const fetchCache = 'default-cache'; // 默认缓存

export const fetchCache = 'only-cache'; // 只使用缓存

export const fetchCache = 'force-cache'; // 强制缓存

export const fetchCache = 'default-no-store'; // 默认不缓存

export const fetchCache = 'only-no-store'; // 只允许不缓存

export const fetchCache = 'force-no-store'; // 强制不缓存

元数据和SEO#

元数据#

动态生成元数据

import type { Metadata } from 'next'

export async function generateMetadata({ params }: { params: { slug: string } }): Promise<Metadata> {

// 根据动态参数获取数据

const post = await getPost(params.slug)

return {

title: post.title,

description: post.description,

openGraph: {

title: post.title,

description: post.description,

images: [post.image],

},

}

}

定义静态元数据

// 静态元数据

export const metadata: Metadata = {

title: 'My Page',

description: 'This is my page description',

keywords: ['next.js', 'react', 'typescript'],

openGraph: {

title: 'My Page',

description: 'This is my page description',

},

}

使用场景#

静态 Metadata 适用于:

内容固定的页面(如关于我们、联系我们)

不需要根据路由参数变化的页面

简单的静态页面

动态 Metadata 适用于:

博客文章详情页(根据文章 slug 获取标题、描述)

产品详情页(根据产品 ID 获取信息)

用户个人资料页(根据用户 ID 获取信息)

任何需要根据路由参数或外部数据动态生成 metadata 的页面

静态参数#

// 生成静态参数(用于动态路由)

export async function generateStaticParams() {

return [

{ slug: 'post-1' },

{ slug: 'post-2' },

];

}

常用组合示例#

完全静态页面#

export const dynamic = 'force-static';

export const revalidate = false;

实时动态页面#

export const dynamic = 'force-dynamic';

export const revalidate = 0;

定时更新页面#

export const revalidate = 3600; // 每小时更新一次

Edge 运行时优化#

export const runtime = 'edge';

export const dynamic = 'force-dynamic';

API 路由配置#

// 在 API 路由中也可以使用

export const runtime = 'edge';

export const maxDuration = 10;

使用场景建议#

配置 适用场景

revalidate = 0 实时数据展示,如股票价格、聊天应用

revalidate = 60 定期更新的内容,如新闻、博客

dynamic = 'force-static' 完全静态的页面,如关于我们

dynamic = 'force-dynamic' 个性化内容,如用户仪表板

runtime = 'edge' 需要低延迟的全球分发

fetchCache = 'force-no-store' 敏感数据,不允许缓存

注意事项#

只能在页面或布局文件中使用 :这些配置只在 page.tsx 、 layout.tsx 或 route.ts 文件中有效

这些配置选项只能在 Server Component Pages、Layouts 或 Route Handlers 中使用

必须是具名导出 :必须使用 export const 语法

配置值必须是 静态可分析的 (例如 revalidate = 600 有效,但 revalidate = 60 * 10 无效)

类型安全 :TypeScript 会检查这些配置的类型

优先级 :子路由的配置会覆盖父路由的配置

这些配置选项让 Next.js 能够精确控制每个页面的渲染和缓存行为,是 App Router 架构的核心特性之一

官方文档#

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 20:56:49

【渗透测试零基础入门】搭建 DVWA 靶场保姆级教程(超详细),收藏这一篇就够了!_dvwa靶场搭建

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

作者头像 李华
网站建设 2026/4/28 10:19:59

485报文订阅服务

订阅服务结构体 // 用于管理某类服务的数据订阅关系,支持多个订阅者注册/注销,便于模块间解耦和消息分发。 //订阅服务结构体 struct SERVICE_SUB_INFO{ MessageQueue * i_subscribe_list[SUB_MEB_MAX]; //订阅者消息队列指针数组,最多支持8个订阅者(如不同模块/线程对…

作者头像 李华
网站建设 2026/4/16 10:40:09

AD学习笔记-31 DRC检查

今天&#xff0c;我们介绍很重要的一部分&#xff0c;DRC检查。1、DRC找到工具-设计规则检查点开以后&#xff0c;把停止检测以后的数值修改为50000.这个意思是找到50000个就停止寻找错误&#xff0c;原来的默认值是500&#xff0c;明显可能不满足需求接着&#xff0c;我们去看…

作者头像 李华
网站建设 2026/4/16 14:06:40

AD学习笔记-32 PCB尺寸标注与边缘测量

今天&#xff0c;我们学习如何对PCB的尺寸进行标注。1、尺寸标注我们找到放置-尺寸-线性尺寸&#xff08;其他的大家自行探索&#xff09;。出现了我们的标尺&#xff0c;我们把光标放到板子的一端&#xff0c;单击。然后拖到板子的另一端&#xff0c;并把它拖出来&#xff0c;…

作者头像 李华
网站建设 2026/4/27 6:03:56

【Spring框架】SpringJDBC

Spring JDBC 与 JdbcTemplateSpring JDBC 是Spring所提供的持久层技术&#xff0c;用于简化数据库操作的一个模块&#xff0c;以一种更简洁&#xff0c;更直接的方式使用 JDBC API 简化了开发人员对数据库的操作。JdbcTemplate 则是 Spring JDBC 模块中最核心的类&#xff0c;是…

作者头像 李华
网站建设 2026/4/25 18:59:08

大模型通义千问3-VL-Plus - 视觉推理(本地图片)

一、概论 官方给出的解释&#xff1a;视觉推理模型能够先输出思考过程&#xff0c;再输出回答内容&#xff0c;适用于处理复杂的视觉分析任务&#xff0c;如解读数学题、分析图表数据或复杂视频理解等任务。 简单来说&#xff0c;视觉推理是人工智能的一个分支&#xff0c;核心…

作者头像 李华