Next.js 的客户端组件和服务端组件讲解 文章目录一、什么是 Server Component二、什么是 Client Component三、Server Component 与 Client Component 的区别四、嵌套规则1. Server Component 可以嵌套 Client Component ✅2. Client Component 不能嵌套 Server Component ❌五、为什么不能在 Server Component 里直接使用 Client Hook六、最佳实践在Next.js 15 的 App Router中React 组件分为Server Component服务端组件和Client Component客户端组件注意区分这两者的细节。一、什么是 Server Component默认组件类型App Router 下app/目录里的组件默认都是Server Component。运行环境在服务端执行Node.js可直接访问数据库、文件系统、环境变量等。特点不会打包到浏览器体积小。不可使用 React Hook如useState,useEffect。可直接渲染 HTML首屏渲染快SEO 友好。示例// app/page.js (Server Component)exportdefaultfunctionPage(){returnh1Hello from Server Component/h1;}二、什么是 Client Component显式声明在组件文件顶部添加use client;运行环境在浏览器端执行可响应用户交互使用 React Hook。特点可使用useState,useEffect,useContext等 Hook。体积较大会被打包到客户端 JS。适合处理按钮点击、表单、动画等动态交互。示例use client;import{useState}fromreact;exportdefaultfunctionCounter(){const[count,setCount]useState(0);returnbutton onClick{()setCount(count1)}Count:{count}/button;}三、Server Component 与 Client Component 的区别特性Server ComponentClient Component默认✅ 默认❌ 必须use client执行位置服务端Node.js浏览器可访问数据库 / secrets✅❌ 不安全React Hooks❌✅首屏渲染性能高较低JS 加载打包体积小大SEO优差需客户端渲染四、嵌套规则1. Server Component 可以嵌套 Client Component ✅常见模式页面或布局为 Server Component局部组件为 Client Component。// app/page.jsimportCounterfrom./Counter;// Counter 是 Client ComponentexportdefaultfunctionPage(){return(divh1Server Component/h1Counter//div);}注意:Server Component 嵌套 Client Component时必须通过 import 引入成组件。不能直接写在Server Component里。Server/Client 嵌套示意Page (Server) ├─ Header (Server) ├─ Counter (Client) ← 用 useState / useEffect └─ Footer (Server)2. Client Component 不能嵌套 Server Component ❌原因浏览器无法执行 Server Component 的服务端逻辑。如果尝试 import Server Component会报错Error: Server component imported into a client component解决方法将被嵌套组件改成 Client Component或将 Server Component 提取到父组件。五、为什么不能在 Server Component 里直接使用 Client HookServer Component 运行在服务端不存在浏览器环境。React HookuseState,useEffect只能在客户端执行。强制要求要使用 Hook必须在 Client Component 里。错误示例exportdefaultfunctionPage(){const[count,setCount]useState(0);// ❌ 报错returnbutton onClick{()setCount(count1)}{count}/button;}六、最佳实践尽量保持页面和布局为 Server Component提升首屏渲染速度减少 JS 包体积。交互、状态管理、浏览器 API 组件用 Client Component例如按钮计数器、表单、动态列表、动画。嵌套规则Server Component → Client Component ✅Client Component → Server Component ❌数据获取在 Server ComponentServer Component 可直接调用数据库 / fetch API将数据传给 Client Component 只做渲染和交互。布局优先 Server页面整体布局尽量 Server Component仅在局部需要交互的地方使用 Client Component。页面和 Header、Footer 由服务端渲染。Counter 组件在浏览器端处理点击和状态。保持 Server Component 不直接依赖 Client Hook。 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目

相关新闻

最新新闻

高性能分布式KV存储引擎RocksDB入门与C/C++编码实战

高性能分布式KV存储引擎RocksDB入门与C/C++编码实战

一、RocksDB项目介绍 RocksDB是由Facebook团队开发的一个嵌入式、持久化的键值(Key-Value)存储数据库,其核心设计基于Google的LevelDB项目。当时为了应对大规模数据存储与高并发写入场景时遇到的性能瓶颈,而传统的基于B-Tree结构的数据库在随机写入场景下…

2026/8/25 12:04:36
Live2D模型Web部署实战:从零实现“她与她的猫”动态展示

Live2D模型Web部署实战:从零实现“她与她的猫”动态展示

这次我们来看一个 Live2D 模型展示项目,主题是“她,与她的猫”。Live2D 作为一种2D图像渲染技术,能让静态的插画“活”起来,实现流畅的转头、眨眼、呼吸等动作,广泛应用于虚拟主播、游戏角色和互动应用。这个项目展示了…

2026/8/25 12:04:36
MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么?

MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么?

MySQL 中 DATETIME 和 TIMESTAMP 的区别 这两个类型都用于存储日期和时间,但底层存储方式、范围、时区处理等方面有本质区别。下面从多个维度详细对比:一、核心区别速览维度DATETIMETIMESTAMP存储空间8字节4字节表示范围‘1000-01-01’ 到 ‘9999-12-31’…

2026/8/25 12:04:36
Web前端集成Live2D实战:从零构建交互式二次元看板娘

Web前端集成Live2D实战:从零构建交互式二次元看板娘

最近在开发一个二次元风格的社区项目时,想为个人主页增加一个动态的、有生命感的看板娘,提升用户互动体验。调研了多种方案后,最终选择了 Live2D Cubism 这一成熟的 2D 渲染技术。它能让静态的插画“活”起来,实现自然的眨眼、呼吸…

2026/8/25 12:04:36
从零实现网页Live2D看板娘:基于Pixi.js与Cubism SDK的实战指南

从零实现网页Live2D看板娘:基于Pixi.js与Cubism SDK的实战指南

最近在开发一个互动式个人主页时,想加入一个能吸引访客的“数字伙伴”。静态图片太普通,3D模型又太重,最终选择了Live2D——这个在二次元领域广为人知的2D渲染技术。它能让角色“活”起来,眨眼、转头、跟随鼠标,交互体…

2026/8/25 12:04:36
锤子助手第040个开关:启用长按截图发送小窗快捷发送的位置、验证方法与截图外发边界

锤子助手第040个开关:启用长按截图发送小窗快捷发送的位置、验证方法与截图外发边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/8/25 11:59:36