【发布时间】:2021-05-28 13:31:06
【问题描述】:
我在 react js 应用程序中有下一个代码:
const items = [
{
value: "A",
label: "A"
},
{
value: "B",
label: "B"
},
{
value: "C",
label: "C"
},
{
value: "D",
label: "D"
},
{
value: "E",
label: "E"
}
];
const Test = () => {
const [actives, setActives] = useState(["A", "C"]);
function onChange(checkedValues) {
console.log("checked = ", checkedValues);
setActives(checkedValues);
}
console.log(actives);
return (
<>
<Form name="basic" initialValues={{ remember: true }}>
<Form.Item
label="Username"
name="username"
rules={[{ required: true, message: "Please input your username!" }]}
>
<Checkbox.Group
style={{ width: "100%" }}
value={actives}
onChange={onChange}
>
<Row>
{items.map((i) => {
return (
<Col className={actives.includes(i.value) ? "active" : ""}>
<Checkbox value={i.value}>{i.label}</Checkbox>
</Col>
);
})}
</Row>
</Checkbox.Group>
</Form.Item>
</Form>
</>
);
};
这里我有一组复选框。根据单击的复选框,它应该显示为红色 -active 类。现在您可以看到默认情况下其中一些已被选中。 const [actives, setActives] = useState(["A", "C"]);
我想实现这个:
当用户选择另一个复选框而不是那些处于活动状态的复选框时,活动复选框不必像现在那样被禁用。如果用户点击已经激活的复选框,我们应该从该复选框中删除活动类。 最终用户应该能够为所有复选框添加一个活动类,但要考虑之前已经处于活动状态的复选框。
问题:如何做到这一点?
我试图做这样的事情,但它不起作用:
function onChange(checkedValues) {
console.log("checked = ", checkedValues);
if (!actives.includes(checkedValues[length - 1])) {
setActives(checkedValues.filter((i) => i !== checkedValues[length - 1]));
}
setActives(checkedValues);
}
演示:https://codesandbox.io/s/use-with-grid-antd4123-forked-5kku2?file=/index.js:479-736
【问题讨论】:
-
您是否正在尝试一个复选框,其中您有一个选中所有选项和三个复选框
-
@DILEEP THOMAS,你是什么意思?我希望当我检查另一个默认情况下未选中的复选框时不会丢失默认复选框的活动状态,但是如果我将检查默认选中的复选框,则活动状态应该仅针对已选中的复选框消失。请告诉我是否不清楚。詹克斯
-
@DILEEPTHOMAS,你能帮忙吗?
-
所以默认情况下 A 和 C 有一个活动类但它们没有被选中,1)现在用户点击 B 是否需要活动类 2)当用户点击 A 复选框时如果应该删除活动类,或者应该发生什么。不是
-
@DILEEPTHOMAS,这两个默认被选中+处于活动状态。当点击 A 时,我们应该删除类并取消选择,但不应该取消选择 C,只有当用户点击 C