我有一个功能,一旦选中主复选框,就会触发子复选框,所有这些复选框都是从JSON映射的。主复选框(最高顺序)及其下的所有子级复选框(第二级)都显示在复选框上,并且工作正常,我要显示的是主要复选框的子级(第三级)。 / p>
基本上是在选中时将所有三个订单显示在彼此的下面,并将第三个订单添加到我当前的代码中,因此 Options Group (选项组)显示 Options (在选项中),并在选项是我想要显示的,它们是选项1 ,选项2 ,选项3 ,等等。 >
复选框值作为道具从 Checkbox.js 传递到发生提取/映射的 Itemlist.js 。
在尝试实现这一目标时,我已经能够显示每个三阶复选框,但每个都单独显示,而不是将它们显示为嵌套复选框。我试图将其包含在现有的映射函数中,以将它们全部显示为如上所述的嵌套复选框,但它无法正常工作,仅当它被单独映射而不是当前映射路径(即const selectedItem )时才起作用em>。而目标复选框(第3级)的映射路径作为 selectedMod
常量添加到 Itemlist.js 中主要代码段:https://codesandbox.io/embed/6jykwp3x6n?fontsize=14
到目前为止,我达到了显示目标复选框的目的,但分别显示:https://codesandbox.io/embed/o932z4yr6y?fontsize=14
Checkbox.js
import React from "react";
import "./Checkbox.css";
class Checkboxes extends React.Component {
constructor(props) {
super(props);
this.state = {
currentData: 0,
limit: 2,
checked: false
};
}
selectData(id, event) {
let isSelected = event.currentTarget.checked;
if (isSelected) {
if (this.state.currentData < this.props.max) {
this.setState({ currentData: this.state.currentData + 1 });
} else {
event.preventDefault();
event.currentTarget.checked = false;
}
} else {
if (this.state.currentData >= this.props.min) {
this.setState({ currentData: this.state.currentData - 1 });
} else {
event.preventDefault();
event.currentTarget.checked = true;
}
}
}
render() {
const input2Checkboxes =
this.props.options &&
this.props.options.map(item => {
return (
<div className="inputGroup2">
{" "}
<div className="inputGroup">
<input
id={this.props.childk + (item.name || item.description)}
name="checkbox"
type="checkbox"
onChange={this.selectData.bind(
this,
this.props.childk + (item.name || item.description)
)}
/>
<label
htmlFor={this.props.childk + (item.name || item.description)}
>
{item.name || item.description}{" "}
</label>
</div>
</div>
);
});
return (
<form className="form">
<div>
{/** <h2>{this.props.title}</h2>*/}
<div className="inputGroup">
<input
id={this.props.childk + this.props.name}
name="checkbox"
type="checkbox"
checked={this.state.checked}
onChange={this.selectData.bind(
this,
this.props.childk + this.props.uniq
)}
onChange={() => {
this.setState({
checked: !this.state.checked,
currentData: 0
});
}}
/>
<label htmlFor={this.props.childk + this.props.name}>
{this.props.name}{" "}
</label>
</div>{" "}
{this.state.checked ? input2Checkboxes : undefined}
</div>
</form>
);
}
}
export default Checkboxes;
Itemlist.js 映射功能发生的位置
...
const selectedItem =
selectedChild.children && selectedChild.children.length
? selectedChild.children[this.state.itemSelected]
: null;
...
<div>
{selectedItem &&
selectedItem.children &&
selectedItem.children.map((item, index) => (
<Checkboxes
key={index}
name={item.name || item.description}
myKey={index}
options={item.children}
childk={item.id}
max={item.max}
min={item.min}
/>
))}
</div>
...