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

如何实现类似React-Bootstrap Card的子组件作为父组件属性的语法

实现思路

这种组件写法是React生态常用的复合组件模式,核心逻辑是把关联的子组件作为父组件的静态属性挂载,无需单独导出子组件,使用时直接通过父组件访问即可,具体实现步骤如下:

  • 先分别实现Card对应的各个子组件(Body、Title、Subtitle、Text、Link等),每个子组件仅需处理自身的默认样式、透传props和children渲染逻辑
  • 将所有子组件挂载到Card组件的静态属性上,最终仅导出Card组件即可

示例代码

// 实现各子组件,可根据自身需求替换样式实现(比如用Tailwind、CSS Modules、内联样式都可以)
const CardBody = ({ className = '', children, ...rest }) => {
  return <div className={`card-body ${className}`} {...rest}>{children}</div>
}

const CardTitle = ({ className = '', children, ...rest }) => {
  return <h5 className={`card-title ${className}`} {...rest}>{children}</h5>
}

const CardSubtitle = ({ className = '', children, ...rest }) => {
  return <h6 className={`card-subtitle ${className}`} {...rest}>{children}</h6>
}

const CardText = ({ className = '', children, ...rest }) => {
  return <p className={`card-text ${className}`} {...rest}>{children}</p>
}

const CardLink = ({ className = '', children, ...rest }) => {
  return <a className={`card-link ${className}`} {...rest}>{children}</a>
}

// 实现Card根组件
const Card = ({ className = '', children, ...rest }) => {
  return <div className={`card ${className}`} {...rest}>{children}</div>
}

// 把子组件挂载为Card的静态属性
Card.Body = CardBody
Card.Title = CardTitle
Card.Subtitle = CardSubtitle
Card.Text = CardText
Card.Link = CardLink

export default Card

完成上述实现后,你就可以直接用和React-Bootstrap完全一致的语法调用组件,不需要额外导入各个子组件,仅导入Card即可。如果需要实现父子组件的状态共享(比如全局尺寸配置、选中状态同步等复杂逻辑),可以在Card组件内结合React Context传递共享状态,子组件内部消费对应Context即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:15:06