You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Server Components作为Props/子组件传入Client Components会转为客户端组件吗?

React 服务端组件与客户端组件嵌套疑问解答

代码示例

根组件(app.tsx)

const App = () => {
  return (
    <CSRComp>
      <SSRComp />
    </CSRComp>
  );
};

export default App;

客户端组件(CSRComp.tsx)

"use client"
import { useState } from "react";

const CSRComp = ({ children }) => {
  const [count, setCount] = useState(0);

  return (
    <>
      <p>Client side component</p>
      <p>{count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
      {children}
    </>
  );
};

export default CSRComp;

服务端组件(SSRComp.tsx)

const SSRComp = () => {
  return (
    <p>Server side component</p>
  );
};

export default SSRComp;

疑问解答

1. 将Server Components作为Props传入Client Components会使其变为客户端组件吗?

不会。把服务端组件作为children(本质是props的一种)传给客户端组件时,服务端组件依然在服务器端完成渲染,生成的静态内容会传递给客户端组件,客户端组件仅负责渲染这些内容,不会改变服务端组件的执行环境和属性。

2. 上述代码中的SSRComp会因被CSRComp作为子组件包裹而转为CSR组件吗?SSRComp是否仍应保持Server组件的属性?

SSRComp不会转为客户端组件,它依然保持服务端组件的所有属性。

React的渲染逻辑里,App作为默认的服务端组件,会先在服务器端渲染SSRComp,将其输出内容作为children传递给CSRComp;之后CSRComp在客户端渲染时,只是把接收到的children内容插入自身DOM结构中。整个过程中SSRComp始终在服务器端执行,不会被打包进客户端JS bundle,也不会在客户端运行。

内容的提问来源于stack exchange,提问作者3DMaX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:22:46