ANTD的 tree 只能勾选最顶层的勾选框,子节点不允许
时间: 2024-12-12 20:16:25 浏览: 3
Ant Design(ANTD)中的Tree组件默认设计是为了保持层级结构的清晰性,通常不允许直接勾选子节点,只能选择并操作其父节点来影响子节点的状态。这是为了确保数据的一致性和树状结构的展示一致性。如果你想自定义这个行为,你可以通过提供一个自定义的`onCheck`回调函数,并在其中手动控制子节点的勾选状态,但这样的改动可能需要你自己管理整个树节点的状态同步。
下面是一个简单的示例,展示了如何在`onCheck`回调中改变这种行为:
```jsx
import { Tree, TreeItem } from 'antd';
const onCheck = (checkedKeys, node) => {
if (node.indeterminate || checkedKeys.includes(node.key)) {
node.checked = !node.checked; // 取反当前的checked值
node.indeterminate = false; // 清除indeterminate状态
// 更新子节点的状态
if (node.children) {
node.children.forEach(childNode => {
onCheck(checkedKeys, childNode);
});
}
}
};
function CustomTree() {
const [checkedKeys, setCheckedKeys] = useState<string[]>([]);
return (
<Tree
defaultCheckedKeys={['1']}
checkable
onCheck={onCheck}
checkedKeys={checkedKeys}
>
<TreeItem key="1">
Parent Node 1
<Tree.Item key="2" title="Child Node 1">
Child Node 1.1
</Tree.Item>
<Tree.Item key="3" title="Child Node 1.2">
Child Node 1.2
</Tree.Item>
</TreeItem>
{/* 更多节点... */}
</Tree>
);
}
// 使用时记得更新setCheckedKeys来同步状态
```
在这个例子中,当用户点击父节点时,`onCheck`会递归地更改所有子节点的勾选状态,实现了允许勾选子节点的效果。
阅读全文