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

news/2025/11/3 21:31:15/文章来源:https://www.cnblogs.com/deali/p/19188353

前言

大家好,我是曦远。

本来是想发昨晚写好的 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' 敏感数据,不允许缓存

注意事项

  1. 只能在页面或布局文件中使用 :这些配置只在 page.tsx 、 layout.tsx 或 route.ts 文件中有效
  2. 这些配置选项只能在 Server Component Pages、Layouts 或 Route Handlers 中使用
  3. 必须是具名导出 :必须使用 export const 语法
  4. 配置值必须是 静态可分析的 (例如 revalidate = 600 有效,但 revalidate = 60 * 10 无效)
  5. 类型安全 :TypeScript 会检查这些配置的类型
  6. 优先级 :子路由的配置会覆盖父路由的配置

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

官方文档

Route Segment Config(路由段配置)

  • 最新版本 : https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config
  • Next.js 14 版本 : https://nextjs.org/docs/14/app/api-reference/file-conventions/route-segment-config

相关文档页面

  1. Dynamic Routes(动态路由)

    • https://nextjs.org/docs/app/building-your-application/routing/dynamic-routes
  2. Data Fetching and Caching(数据获取和缓存)

    • https://nextjs.org/docs/app/building-your-application/data-fetching
  3. Rendering(渲染)

    • https://nextjs.org/docs/app/building-your-application/rendering

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/954917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025.11.3 - A

今天java和数据结构,感觉挺好的。

【每日一面】实现一个深拷贝函数

基础问答 问:知道浅拷贝和深拷贝吗?为什么要用深拷贝? 答:拷贝,可以认为是赋值,对于 JavaScript 中的基础类型,如 string, number, null, boolean, undefined, symbol 等,在赋值给一个变量的时候,是直接拷贝值…

【AI说Rust 01】Rust 的学习路线

Rust 以其卓越的性能和内存安全性吸引了众多开发者。虽然它的学习曲线相对陡峭,但一份清晰的学习路线能让你事半功倍。下面这个路线图汇总了主流的学习阶段和资源,希望能帮你从零开始,逐步进阶。 flowchart LRA[Rus…

若依后端验证码实现

先去看前端的 参考详细讲解视频:https://www.bilibili.com/video/BV1HT4y1d7oA?spm_id_from=333.788.player.switch&vd_source=886219f6fb49f459fbfc8b80a8b39f3f&p=3 登录 前端请求为http://localhost/dev-…

解码LVGL事件

LVGL 事件系统 事件是 LVGL 响应用户操作(如点击、滑动)或控件状态变化的核心机制,通过 “事件绑定 - 回调函数” 实现交互逻辑。 事件核心特点多绑定支持:一个回调函数可绑定多个对象(如一个 “计数回调” 绑定两…

11.3号学习内容

阅读模型压缩的论文| https://doi.org/10.48550/arXiv.2010.03954 | header | | ----------------------------------------- | ------ | | | |

P11771 题解

blog。虽然糖丸了,但是卡了还是半天卡过去了。感谢出题人开 2s /kt!!最显然的暴力是,考虑直接算每个 \(i,j,k\) 的贡献。\(p_{i}\le p_k\wedge p_j\le p_k\):贡献为 \(0\)。 \(p_{i}>p_k\wedge p_j\le p_k\):…

MySQL排序算法

一、概述 ORDER BY的核心功能,是按照指定的单个或多个字段,对SELECT查询返回的结果集进行升序(ASC,默认)或降序(DESC)排列,以满足业务对数据有序性的需求。但要判断ORDER BY的实际执行效率,最直接的工具是EXP…

CSP-S 2025 饭堂寄

省流:\(100+48+0+0=148\),爆炸。 Day -2 考试前几天竟然发现有些感冒了。 Day -1 考试前一天晚上睡得比较晚,因为回到家都接近 11 点钟了。 Day 1 早上起来已经 9:30 了,起来开始打板子,其实这个时候已经感觉状态…

如何在github上使用github免费域名下预览自己的项目

一、新建自己的工程然后上传自己的工程文件,有首页的话记下首页的路径。 二、点击Settings 点击Pages,填写自己要访问的index.html文件路径

在ROS中安装PX4依赖实现Gazebo仿真

在ROS中安装PX4依赖实现Gazebo仿真最近这几天在做一个无人机项目,在配置gazebo仿真时出现了找不到px4的问题,但是又无法直接安装,需要自行编译 简单做一下记录 sudo apt install ninja-build exiftool ninja-build …

20232314 2024-2025-1 《网络与系统攻防技术》实验四实验报告

一、实验内容 1、恶意代码文件类型标识、脱壳与字符串提取 对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者,具体操作如下: (1)使用文件格式和类型识别工具,给出ra…

二、驱动基础(基于北京迅为电子)

一、基础Linux驱动的分类:字符设备(顺序访问)、块设备(随机访问)、网络设备(数据包收发) Linux内核源码的目录架构:arch(架构相关)、block(块设备)、crypto(加密算法)、Documentation(官方文档)、driv…

Linux驱动开发学习日记(一)

Linux驱动开发学习日记(一)整完无人机项目之后进行更新,具体怎么写还没想好,现在学的也比较迷糊

Windows 路由表详解

Windows 路由表详解windows 路由表详解 查看ip信息 字段说明IPv4 Address: ipv4地址,用于标识网络中的主机Subnet Mask: 子网掩码,分为 连续的1 和 连续的0 两部分, 可以简写为 /n, 例如 /24,表示高24位为1,剩下为…

微软 Foundry Local - 本地 AI 推理解决方案

微软在其 2025 Build 大会上发布了 Foundry Local,能够在本地设备上执行 AI 推理,意味着可以利用本地的 AI 算力,如:CPU/GPU/NPU;也让用户在隐私方面得到了充足的保障,还能有改善成本效益!Foundry Local 默认除…

如何启用cycloneDDS的iceoryx

共享内存交换 — Eclipse Cyclone DDS,0.11.0 首先我们需要先下载安装iceoryx,因为cycloneDDS如果要使用共享内存传输是依赖于这个插件的。顺带一提,只有同一节点的不同进程间会使用到共享内存,cycloneDDS是根据如…

老化车

老化车非常好 👍,这个问题在电子制造和测试领域里很关键。 “老化车”(又叫 Burn-in Cart 或 Aging Rack)是用于电子产品在出厂前做 老化测试(Burn-in Test) 的一种设备或平台。 下面我给你系统讲清楚 👇🧭…

Android Studio 2025.2.1 汉化中文包临时解决方案

打开 JetBrains 官网 Chinese ​(Simplified)​ Language Pack / 中文语言包 下载最新版 242.152 版本插件将 zh.242.152.jar 文件解压出来用压缩包工具打开 zh.242.152.jar 找到目录 META-INF 并打开用文本编辑工具打…

Markdown 学习训练

Markdown 学习训练 引用(使用>)这是我的第一篇博客,本篇博客是参照狂神说课程进行学习,目的是为了练习markdown使用语法。主要包含各级标题、字体、图片、代码块、超链接、表格使用语法练习。具体可前往typora官网…