javascript - 带有“子组件”的 ReactJS 组件
问题描述
我对 ReactJS 很陌生,并开始制作一些这样的组件:
class Row extends React.Component {
render() {
return (
<div className={"row w-100 ml-0 mr-0 " + this.props.className}>
{this.props.children}
</div>
);
}
}
我现在想要实现的是该组件具有“子组件”(我不知道正确的词)之类的或类似的东西。
我是否必须为此创建另一个组件,或者是否可以在一个组件中实现它?
编辑:
我有这个组件里面已经有孩子:
<div className="custom-card">
<Card>
<CardHeader onClick={this.toggle} className={"card-header " + ((!this.props.readOnly && this.props.headerCtrl) && "pt-0")}>
<CardTitle className="card-title d-flex justify-content-between">
<p>{this.props.title}</p>
</CardTitle>
</CardHeader>
<Collapse isOpen={this.state.collapse}>
<CardBody className="card-body">
{this.props.children}
</CardBody>
</Collapse>
</Card>
</div>
但我也希望用户可以指定应该在卡片头中显示哪个组件。这样不仅可以有a <p>
,还可以有a<input>
等等。
解决方案
如果我理解正确,您需要多个占位符,而不仅仅是一个children
. 幸运的是,React 元素只是 JavaScript 对象,您可以将它们作为道具传递。
当您的组件 ( <CustomCard>
) 具有类似于您的问题中的渲染方法时(未更改):
<div className="custom-card">
<Card>
<CardHeader onClick={this.toggle} className={"card-header " + ((!this.props.readOnly && this.props.headerCtrl) && "pt-0")}>
<CardTitle className="card-title d-flex justify-content-between">
<p>{this.props.title}</p>
</CardTitle>
</CardHeader>
<Collapse isOpen={this.state.collapse}>
<CardBody className="card-body">
{this.props.children}
</CardBody>
</Collapse>
</Card>
</div>
您可以像这样传递标题的自定义组件:
<CustomCard title={<SpecialTitle>My special title</SpecialTitle>}>
My card body!
</CustomCard>
推荐阅读
- c# - Linq Aggregate gives null value rather than expected return List
- acumatica - 错误:发票和备忘录屏幕中的 Acumatica SOAP API 发行发票 (AR301000)
- java - Spring Security 中的错误,状态码为 404
- java - 从 ArrayList-Member 中删除项目后将对象写入 FirebaseDatabase 时出现 InvocationTargetException
- java - 将对象集映射到字符串集
- sql - 来自 SCD2 维度变化的事实表中的重复行
- django - Stripe Webhooks:Invoice.paid 与 Checkout.Session.Completed
- c# - 如何获取 Microsoft Common Data Service 表的连接字符串?
- android - 为什么 Android Studio 在默认文件中显示错误
- python - 具有多个条件和不同更新的 SQLite 命令