【发布时间】:2020-03-20 16:41:43
【问题描述】:
我需要将默认复选框设置为 selected 。例如,我有输出
{permission:{group:["can_view"],"topGroup":["can_update"]}} .
我发送到数据库,数据库给我发送数据,我想在我去编辑时显示从数据库发送的数据。
我只想根据我的输出选择默认复选框。
这是我的初始状态
const group = ["group", "top"];
const groupItems = ["Apple", "Pear", "Orange"];
this.state = {
permission: {}
};
UNSAFE_componentWillMount() {
this.setDefault(false);
}
setDefault = fill => {
const temp = {};
group.forEach(x => (temp[x] = fill ? groupItems : []));
this.setState({ permission: temp });
};
checkLength = () => {
const { permission } = this.state;
let sum = 0;
Object.keys(permission).forEach(x => (sum += permission[x].length));
return sum;
};
isTotalIndeterminate = () => {
const len = this.checkLength();
return len > 0 && len < groupItems.length * group.length;
};
onCheckTotalChange = () => e => {
this.setDefault(e.target.checked);
};
isTotalChecked = () => {
return this.checkLength() === groupItems.length * group.length;
};
这些方法适用于每个组,例如这里是我的两个角色 - 一个是组,另一个是 topGroup。
isIndeterminate = label => {
const { permission } = this.state;
return (
permission[label].length > 0 &&
permission[label].length < groupItems.length
);
};
onCheckAllChange = label => e => {
const { permission } = this.state;
const list = e.target.checked ? groupItems : [];
this.setState({ permission: { ...permission, [label]: list } });
};
isAllChecked = label => {
const { permission } = this.state;
return !groupItems.some(x => !permission[label].includes(x));
};
/** * 这些方法适用于单个项目,例如 can_view、can_delete、can_update */
isChecked = label => {
const { permission } = this.state;
return permission[label];
};
onChange = label => e => {
const { permission } = this.state;
this.setState({ permission: { ...permission, [label]: e } });
};
渲染(UI)
<Checkbox
indeterminate={this.isTotalIndeterminate()}
onChange={this.onCheckTotalChange()}
checked={this.isTotalChecked()}
>
Check Total
</Checkbox>
{group.map(label => (
<div key={label}>
<div className="site-checkbox-all-wrapper">
<Checkbox
indeterminate={this.isIndeterminate(label)}
onChange={this.onCheckAllChange(label)}
checked={this.isAllChecked(label)}
>
Check all
</Checkbox>
<CheckboxGroup
options={groupItems}
value={this.isChecked(label)}
onChange={this.onChange(label)}
/>
</div>
</div>
))}
如何在 reactjs 中选择复选框? 这是codesanbox:https://codesandbox.io/s/stackoverflow-a-60764570-3982562-v1-rsnjt?fontsize=14&hidenavigation=1&theme=dark
【问题讨论】:
-
哪个是您的默认复选框?
-
当我点击复选框时,我得到了一些输出 {permission:{group:["can_view"],"topGroup":["can_update"]}} 。我发送这个数据库,但是当我想要查看,我需要显示选中的复选框
标签: javascript arrays reactjs object antd