Next.js服务器组件Skill nextjs-server-components

Next.js服务器组件是一种在服务器端渲染React组件的技术,用于优化Web应用性能、减少客户端JavaScript包大小、支持直接数据库访问,适用于构建高效、SEO友好的应用,关键词包括Next.js、服务器渲染、性能优化、React、前端开发。

前端开发 0 次安装 0 次浏览 更新于 3/18/2026

name: nextjs-server-components description: 使用Next.js服务器组件构建高效的React应用程序,这些组件在服务器上渲染,减少客户端包大小,提高性能,并允许直接数据库访问。使用场景包括服务器端获取数据、减少JavaScript包大小、在组件中直接访问数据库、使用Suspense实现流式渲染、创建只渲染一次的布局、优化核心网页指标,或使用服务器优先架构构建SEO友好的应用程序。

Next.js服务器组件 - React服务器组件模式

何时使用此技能

  • 在服务器组件中直接获取数据
  • 减少客户端JavaScript包大小
  • 直接访问数据库而无需API路由
  • 使用Suspense实现流式渲染
  • 创建渲染一次并持久化的布局
  • 优化最大内容绘制(LCP)
  • 构建SEO友好的服务器渲染应用程序
  • 使用仅服务器代码(数据库查询、密钥)
  • 实现服务器端数据转换
  • 减少交互时间(TTI)
  • 默认构建零客户端JS的应用程序
  • 有效结合服务器和客户端组件

何时使用此技能

  • 构建Next.js 13+应用,优化组件渲染,管理服务器/客户端边界。
  • 在处理相关任务或功能时
  • 在需要此专业知识的开发期间

使用时机:构建Next.js 13+应用,优化组件渲染,管理服务器/客户端边界。

关键概念

服务器组件(在应用路由器中默认):

  • 仅在服务器上运行
  • 可以直接访问数据库/API
  • 零客户端JavaScript
  • 支持异步/等待

客户端组件(‘use client’):

  • 交互功能
  • 浏览器API
  • React钩子(useState、useEffect等)

组合模式

// ✅ 服务器组件获取数据
// app/page.tsx
import { ClientComponent } from './ClientComponent';

export default async function Page() {
  const data = await fetchData(); // 服务器端
  
  return (
    <div>
      <h1>服务器渲染:{data.title}</h1>
      <ClientComponent initialData={data} />
    </div>
  );
}

// ✅ 客户端组件处理交互性
// app/ClientComponent.tsx
'use client';

export function ClientComponent({ initialData }) {
  const [count, setCount] = useState(0);
  
  return <button onClick={() => setCount(count + 1)}>{count}</button>;
}

将服务器组件作为子组件传递

// ✅ 客户端组件带有服务器组件子组件
'use client';

export function ClientLayout({ children }: { children: React.ReactNode }) {
  const [isOpen, setIsOpen] = useState(false);
  
  return (
    <div>
      <button onClick={() => setIsOpen(!isOpen)}>切换</button>
      {isOpen && children}
    </div>
  );
}

// 用法 - 子组件可以是服务器组件!
<ClientLayout>
  <ServerDataComponent /> {/* 保持在服务器上 */}
</ClientLayout>

何时使用客户端组件

仅在需要时使用’use client’:

  • useState、useEffect、useContext
  • 浏览器API(localStorage、window)
  • 事件处理程序(onClick、onChange)
  • 自定义钩子
  • 使用React钩子的第三方库

资源


记住:默认保持组件在服务器端。仅在需要交互性时添加’use client’。