Next.js - 01 - 路由、特殊文件与渲染机制
路由、特殊文件与渲染机制npm 命令对照命令实际执行用途npm run devnext dev开发模式热更新、详细报错npm run buildnext build先构建生产版本npm startnext start生产模式跑已经 build 好的代码使用场景日常写代码、调试→ 用npm run dev模拟线上环境→ 先npm run build再npm start路由与文件① layout vs pagelayout.tsx在路由切换时通常不重新挂载导航栏放这里就不会闪page.tsx会随 URL 换掉② 文件夹 ≈ URL文件夹路径对应 URL 路径例外(main)这种路由组——括号里的名字不出现在 URL 里③ Server Component默认作为 Server Component在服务端渲染 HTML如果页面只是静态展示标题、段落、链接没有useState、点击事件、浏览器 API → 保持 Server Component 即可④ 常见文件夹写法写法含义例子about/固定路由只匹配/about[slug]/动态路由匹配/posts/hello、/posts/abc等(main)/路由组不出现在 URL 里只用来组织 layout(main)/about的 URL 仍是/about等特殊文件① 为何用 notFound()不直接return PageNotFound /notFound()return PageNotFound /HTTP 状态生产环境通常返回 404开发环境也会渲染 not-found 页面但状态码行为可能不同200仍是「正常页面」语义「这个资源不存在」「这是一个普通页面碰巧长得像 404」UI 来源渲染最近的 not-found.tsx你自己 import 的组件多处复用page.tsx、Server Action、数据层都能调 notFound()不用每个文件 import每个地方都要 import returnSEO / 监控爬虫、日志能识别 404会被当成正常 200 页面核心404 是路由/资源层面的结论不是普通 JSX 的一种样式。关键点notFound() 在哪里触发执行会替换掉 xxx.tsx改渲染最近的 not-found.tsx和 throw Error 的区别notFound() → 业务上「找不到」→ not-found.tsxthrow Error → 程序出 bug → error.tsx② loading / error / not-found 放的位置不一样差别在于作用范围segment 树app/(main)/posts/ ├── loading.tsx ← 覆盖 posts 下所有子路由 ├── error.tsx ├── not-found.tsx ├── page.tsx ← 若将来有 /posts 列表页 └── [slug]/ ├── loading.tsx ← 只覆盖 /posts/:slug 详情 ├── error.tsx ├── not-found.tsx └── page.tsxNext 的规则特殊文件只影响「自己这一层 子层」不会向上影响父层。Next.js 渲染逻辑场景对照场景谁渲染渲染几次首次打开 / F5 刷新服务端先出 HTMLClient Component 再在浏览器 hydrate注水Server Component本次请求在服务端执行 1 次不在浏览器跑Client Component服务端预渲染 1 次 客户端 hydrate 1 次Link/ router.push 跳转不整页刷新向服务端要新页面的 RSC PayloadClient Component 局部更新新路由的 Server Component 在服务端再跑一遍router.refresh()URL 不变当前页 Server Component 重新在服务端跑再跑 1 次不是浏览器自己重算所以不是「服务端只渲染一次就完事」而是每次请求/导航/refreshServer Component 都会在服务端执行Client Component 则在服务端预渲染 客户端 hydrate/更新。和传统 React纯 CSR的区别以下以 React 18 的createRootAPI 为例旧版ReactDOM.render已废弃。纯 React SPA浏览器收到空 HTML → 下载 JS → ReactDOM.createRoot().render() → 整棵树在浏览器里从零构建你的 Next.js 项目App Router浏览器收到完整 HTMLServer Component 已填好内容 → 下载 JS → 只有带 use client 的组件做 hydrate挂事件、恢复状态 → Server Component 的 JS 不会发到浏览器执行「客户端渲染逻辑一致吗」—— 分两种组件① Server Component客户端根本不跑同样逻辑像posts/[slug]/page.tsx里的await params、2 秒延迟、notFound()// src/app/(main)/posts/[slug]/page.tsx async function page({ params }: Props) { const { slug } await params; // ... await new Promise((resolve) setTimeout(resolve, 2000)); return (/* ... */); }React 惯例组件名首字母大写如Page项目中此处写的是page。这些只在服务端执行。浏览器收到的只是 HTML 序列化的组件树RSC Payload不会在客户端再跑一遍这段 async 逻辑。首次访问时用户会先看到 loading.tsxSuspense 边界2 秒后服务端渲染完成再替换内容。② Client Component必须和服务端 HTML 一致HydrationClient Component 会跑两次服务端生成初始 HTML为了 SEO、首屏快客户端React 对比 DOM挂上交互hydrate两边输出的 HTML 必须一致否则报 hydration mismatch。你项目里 ThemeToggle 就是一个典型风险点// src/components/theme/index.tsx function getStoredTheme(): ThemeMode { if (typeof window undefined) { return light; // 服务端永远是 light } const cachedTheme localStorage.getItem(cachedThemeKey); return cachedTheme dark ? dark : light; // 客户端可能读到 dark } const [theme, setTheme] useStateThemeMode(getStoredTheme); // 按钮图标表示「点击后切换到的主题」不是当前页面的配色 // light → 显示 提示可切到 darkdark → 显示 提示可切到 light服务端getStoredTheme()无window默认light→ 渲染 客户端localStorage 存了dark→ 首次 render 为dark→ 渲染 两边图标不一致 → 控制台可能报 hydration warning

相关新闻

从安装到实战:掌握AI编程助手Claude Code的高效协作心法

从安装到实战:掌握AI编程助手Claude Code的高效协作心法

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在折腾一些本地代码生成和辅助编程的工具,发现一个挺有意思的现象:很多开发者,包括我自己在内…

2026/7/9 9:15:27阅读更多 →
MyComputerManager:5分钟彻底清理Windows“此电脑“中的顽固图标

MyComputerManager:5分钟彻底清理Windows“此电脑“中的顽固图标

MyComputerManager:5分钟彻底清理Windows"此电脑"中的顽固图标 【免费下载链接】MyComputerManager 管理“此电脑”里删不掉的流氓“快捷方式”(包括侧边栏),同时可自己添加这类“快捷方式” 项目地址: https://gitco…

2026/7/9 9:15:27阅读更多 →
3个超实用秘籍:用开源编辑器彻底改变你的暗黑2游戏体验

3个超实用秘籍:用开源编辑器彻底改变你的暗黑2游戏体验

3个超实用秘籍:用开源编辑器彻底改变你的暗黑2游戏体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还记得那个深夜吗?你在暗黑破坏神2中奋战了整整8个小时,只为了一件传说中的暗金装备&am…

2026/7/9 9:10:27阅读更多 →
2026年AI论文网站实测精选:5款神器从构思到提交全流程护航

2026年AI论文网站实测精选:5款神器从构思到提交全流程护航

写论文的煎熬,是科研人和学生最熟悉的“日常”。选题无从下手,文献检索耗时费力,写作卡壳反复推翻,格式调整令人崩溃,查重降重更是让人如履薄冰。2026年的AI工具早已不再是冷冰冰的“文字机器”,而是进化成…

2026/7/9 10:20:43阅读更多 →
微信好友批量检测终极指南:3分钟找出谁删除了你

微信好友批量检测终极指南:3分钟找出谁删除了你

微信好友批量检测终极指南:3分钟找出谁删除了你 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 想知…

2026/7/9 10:20:43阅读更多 →
Rainmeter音频可视化终极指南:打造桌面音乐盛宴的5个技巧

Rainmeter音频可视化终极指南:打造桌面音乐盛宴的5个技巧

Rainmeter音频可视化终极指南:打造桌面音乐盛宴的5个技巧 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter 想让你的Windows桌面随着音乐节奏舞动吗?Rainmeter作为一款…

2026/7/9 10:20:43阅读更多 →
如何打造你的专属桌面AI伴侣:呆啵宠物完整指南

如何打造你的专属桌面AI伴侣:呆啵宠物完整指南

如何打造你的专属桌面AI伴侣:呆啵宠物完整指南 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 你是否曾经梦想过让喜欢的动漫角色、游戏人物或原创形象成为桌面上的智…

2026/7/9 10:20:43阅读更多 →
Fast-GitHub:国内开发者必备的GitHub下载加速插件

Fast-GitHub:国内开发者必备的GitHub下载加速插件

Fast-GitHub:国内开发者必备的GitHub下载加速插件 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还在为GitHub龟速下载…

2026/7/9 10:20:43阅读更多 →
从抛硬币到马尔可夫链:3 种方法求解连续 N 次成功期望

从抛硬币到马尔可夫链:3 种方法求解连续 N 次成功期望

从抛硬币到马尔可夫链:3种方法求解连续N次成功期望想象你坐在赌场里,面前放着一枚硬币。你开始反复抛掷它,心里默默数着连续出现正面的次数。突然,一个念头闪过:平均需要抛多少次,才能连续看到N次正面&…

2026/7/9 10:15:42阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/9 5:56:19阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/9 9:45:20阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/9 2:47:07阅读更多 →
Three.js 着色器光效教程

Three.js 着色器光效教程

着色器光效 Shader Light ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 ShaderMaterial 自…

2026/7/9 0:04:37阅读更多 →
如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南 【免费下载链接】casemove A dedicated desktop app that enables you to move items in and out of storage units in CS2. 项目地址: https://gitcode.com/gh_mirrors/ca/casemove 还在为CS2存储单…

2026/7/9 0:04:37阅读更多 →
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M…

2026/7/9 0:04:37阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/9 9:45:20阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/8 13:42:39阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/8 13:42:39阅读更多 →