博主在做权限树的时候,遇到过这样一个问题。只要子元素有一个元素被选中,后端需要我把选中节点的父元素也传过去。但是antd Tree默认的checkedKeys中只有子元素全部选中的时候才会把父元素选中,checkedKeys才会包含父元素的值。
解决方法:在onCheck事件里,有两个参数checkedKeys(你选中的元素), info(包含选中子节点的信息),在info里就有他父节点的信息,可以通过info.halfCheckedKeys来获取。然后把父节点元素和子节点放在一个数组,传给后端就好了。
上代码😁
// 选中
onCheck = (checkedKeys, info) => {
let checkedKey = checkedKeys.concat(info.halfCheckedKeys); // 可以在info中获取父元素值
this.setState({
checkedKeys: checkedKeys, // 不包括父元素
checkedKey: checkedKey // 包括父元素
});
};
<Tree
checkable
onExpand={this.onExpand}
expandedKeys={this.state.expandedKeys}
autoExpandParent={this.state.autoExpandParent}
onCheck={this.onCheck}
checkedKeys={this.state.checkedKeys}
// defaultCheckedKeys={defaultListChecked}
>
{this.renderTreeNodes(resourcesList)}
</Tree>