如何取消检查所有子节点,但仍然检查父节点,反之亦然?



我使用的是AntD V5,目前我有一个这样的树我希望它的行为是:

  1. 当我点击父节点时,它的所有子节点都被检查(这正在工作)
  2. 当我取消选中所有被选中的子节点时,它们的父节点仍然被选中。
  3. 当没有检查时,当我检查父节点的所有子节点时,该节点不被检查。

当前只有数字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来演示它。谢谢!

相关内容

  • 没有找到相关文章

最新更新