Composition 组件组合

最后更新:2026-10-28

Composition 组件组合

React 推荐用组合而非继承复用组件:父组件把 JSX 作为 children 或自定义 prop 传进来,由通用容器(Card、Layout、Modal)决定「放哪里」,调用方决定「放什么」。children 就是最自然的插槽机制。

分组组件模式
类型模式

ℹ️ 说明 编辑器将 JSX 转译为 JavaScript 后在沙箱中渲染真实界面;组件自动挂载,无需手写 render 调用。

📝 语法

function Card({ children, footer }) {
  return (
    <div className="card">
      <div>{children}</div>   {/* 主内容插槽 */}
      <div>{footer}</div>     {/* 自定义插槽 prop */}
    </div>
  )
}

// 使用:<Card footer={<small>2026</small>}><p>正文</p></Card>

返回值:无返回值,作为编码模式使用。

▶ 示例

示例可直接运行:展开后自动渲染,编辑代码即时生效。

输出结果:

两个带标题的卡片面板,内容分别由调用方以 children 传入——Panel 只管外框,不关心内部结构。

💡 要点

💡 提示 props.children 是隐式插槽;需要多个插槽时用具名 prop(如 header、footer)传 JSX。
ℹ️ 说明 组合让容器组件不依赖内容组件:Panel 不知道也不关心里面放了什么,天然解耦。
⚠️ 注意 不要用 cloneElement 或类继承去「注入」结构,绝大多数场景 children + props 更清晰可控。
更多案例整理中,敬请期待。

📚 相关教程

❓ 常见问题

Q children 和普通 prop 有什么区别?
A children 是组件开闭标签之间的内容,JSX 语法上更自然;本质仍是 prop,完全可以和具名 prop 混用。
Q 怎么实现多个插槽?
A 定义多个 JSX 类型的 prop:<Modal header={…} footer={…}>{正文}</Modal>,组件内部分别渲染。
Q 组合和继承为什么选组合?
A React 官方立场:继承会让组件耦合父类实现;组合通过 props 传 JSX,灵活、可预测且无需类语法。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏