我使用的是AntD V5,目前我有一个这样的树我希望它的行为是:
- 当我点击父节点时,它的所有子节点都被检查(这正在工作)
- 当我取消选中所有被选中的子节点时,它们的父节点仍然被选中。
- 当没有检查时,当我检查父节点的所有子节点时,该节点不被检查。
当前只有数字1工作。
我试过了,但它只解除了父节点与所有子节点的链接
checkStrictly={true}
这是一个Antd Tree演示的工作示例
我终于把它搞定了!下面是我的onCheck函数传递到Antd Tree
const onCheck = (e, info) => {
const checkedChildrenKeys: (string | number)[] = [];
const unCheckedChildrenKeys: (string | number)[] = [];
const checkedCallback = (e: DataNode) => {
checkedChildrenKeys.push(e.key);
e.children && e.children.forEach(checkedCallback);
};
const uncheckedCallback = (e: DataNode) => {
unCheckedChildrenKeys.push(e.key);
e.children && e.children.forEach(uncheckedCallback);
};
if (info.checked) {
if (!info.node.children) {
setCheckedKeys([...e.checked]);
return;
}
info.node.children.forEach(checkedCallback);
setCheckedKeys([...e.checked, ...checkedChildrenKeys]);
} else {
info.node.children?.forEach(uncheckedCallback);
const uncheckedList = e.checked.filter(
(key: any) => !unCheckedChildrenKeys?.includes(key)
);
setCheckedKeys(uncheckedList);
}
};
我已经更新了我的codesandbox来演示它。谢谢!