reactjs - 如何在 React 中检查动态生成的复选框时有条件地呈现额外的表单选项?
问题描述
任何人都可以帮忙,我正在 React 中尝试这个,但我真的被卡住了。
我在子组件上有 3 个复选框,我使用状态中的一组选项(在父组件中)动态呈现了这些复选框:
我需要做的是,如下图所示:单击每个复选框并获得更多选项。
选中的选项和子选项(不仅仅是下拉菜单,第三个复选框有输入字段)都需要在状态下可用,以便我可以收集它们并将它们发布到数据库
到目前为止我所拥有的是以下内容:
状态中的选项数组:
sowType: [
"ProductSow",
"Teradata Customer SOW",
"Custom Professional Services SOW"
]
最终渲染的复选框:
我的问题是,我不知道下一步该做什么。我已经动态渲染了最初的 3 个复选框,但我不知道如何添加条件渲染以使子框在单击复选框时出现)并将从中选择的信息添加到状态。
即我可以只在尚未从地图动态呈现的复选框上添加条件呈现,还是有办法做到这一点,在这种情况下如何完成?
到目前为止,我的代码如下,它可能不是我想要做的最好的设置:
有人可以帮忙吗??
这是对父组件的引用,其中传递了 props:
<SowType
title={"SOW Type"}
setName={"SOW Type"}
subtitle={"What type of SOW do you want to generate?"}
type={"checkbox"}
controlFunc={this.handleSOWTypeCheckbox}
options={this.state.sowType}
selectedOptions={this.state.sowTypeSelectedOption}
/>
这是子组件从状态动态渲染项目数组:
class SOWType extends React.Component {
render() {
// console.log(this.props);
return (
<div className="form-group">
<label htmlFor={this.props.name} className="form-label">
{this.props.title}
<h6>{this.props.subtitle}</h6>
</label>
<div className="checkbox-group">
{this.props.options.map(option => {
return (
<label key={option}>
<input
className="form-checkbox"
name={this.props.setName}
onChange={this.props.controlFunc}
value={option}
checked={this.props.selectedOptions.indexOf(option) > -1}
type={this.props.type}
/>
{option}
</label>
);
})}
</div>
</div>
);
}
}
这是我当前在父组件中单击复选框时在父组件中使用的方法(这基本上从处于状态的数组中获取选定的选项,并将选中的选项放入另一个名为“sowTypeSelectedOption:[]”的数组中,
handleSOWTypeCheckbox(e) {
const newSelection = e.target.value;
let newSelectionArray;
if (this.state.sowTypeSelectedOption.indexOf(newSelection) > -1) {
newSelectionArray = this.state.sowTypeSelectedOption.filter(
item => item !== newSelection
);
} else {
newSelectionArray = [...this.state.sowTypeSelectedOption, newSelection];
}
this.setState(
{
sowTypeSelectedOption: newSelectionArray
} /*() =>
console.log("sow Type Selection: ", this.state.sowTypeSelectedOption) */
);
}
解决方案
如果我理解您的问题是正确的,您希望在选中复选框后显示附加子菜单,然后您可以使用条件渲染。只需在选择或取消选择复选框时显示/隐藏菜单,就像这样。
{ this.props.selectedOptions.indexOf(option) > -1 ? (
<h5>submenu options component renders here</h5>
) : " "
}
推荐阅读
- python - 将数据附加到标签(Chart.js 和 Django 3)
- c# - Blazor Web 应用 SetString 引发异常错误消息“对象引用未设置为对象的实例。”
- java - 当我从翻转的 textureRegion 创建它时,LibGDX 无法使用 NinePatchDrawable 作为表格的背景
- java - Android SmsManager.sendTextMessage 失败且没有错误
- css - 显示时如何使img居中:块不起作用?
- ruby-on-rails - ActiveRecord 忽略验证
- c# - 在这种情况下,EF Core 生成的 SQL 效率很低,有什么解决方法吗?
- arrays - Dart 上的 Google Kick Start Time Limited
- android - 有没有办法通过识别用户而不是设备来发送通知?
- docker - Windows 8 上的 Docker 安装问题