增加节点层级,并且下面显示的数据后面有删除按钮

时间: 2024-03-19 11:43:30 浏览: 14
可以在上面的示例代码基础上进行修改,增加节点层级和删除按钮的功能。 以下是示例代码: ``` import React, { useState } from 'react'; import { Tree, Checkbox, List, Button } from 'antd'; const treeData = [ { title: 'Node 1', key: '1', children: [ { title: 'Node 1-1', key: '1-1', children: [ { title: 'Node 1-1-1', key: '1-1-1', }, { title: 'Node 1-1-2', key: '1-1-2', }, ], }, { title: 'Node 1-2', key: '1-2', children: [ { title: 'Node 1-2-1', key: '1-2-1', }, { title: 'Node 1-2-2', key: '1-2-2', }, ], }, ], }, { title: 'Node 2', key: '2', }, ]; function TreeDemo() { const [checkedKeys, setCheckedKeys] = useState([]); const [treeData, setTreeData] = useState(treeData); const onCheck = (checkedKeys) => { setCheckedKeys(checkedKeys); }; const onAdd = (selectedKey) => { const newNode = { title: `New Node ${Math.random().toString(36).substr(2, 5)}`, key: `${selectedKey}-${Math.random().toString(36).substr(2, 5)}`, children: [], }; const traverseTree = (node) => { if (node.key === selectedKey) { node.children.push(newNode); } else if (node.children) { node.children.forEach((child) => { traverseTree(child); }); } }; treeData.forEach((node) => { traverseTree(node); }); setTreeData([...treeData]); }; const onDelete = (selectedKey) => { const traverseTree = (node, parentNode) => { if (node.key === selectedKey) { if (parentNode) { parentNode.children = parentNode.children.filter( (child) => child.key !== selectedKey ); } else { setTreeData(treeData.filter((node) => node.key !== selectedKey)); } } else if (node.children) { node.children.forEach((child) => { traverseTree(child, node); }); } }; treeData.forEach((node) => { traverseTree(node, null); }); setCheckedKeys(checkedKeys.filter((key) => key !== selectedKey)); }; const renderTreeNode = (node) => { const title = ( <div> <span>{node.title}</span> <Button type="text" size="small" danger onClick={() => onDelete(node.key)} > Delete </Button> <Button type="text" size="small" onClick={() => onAdd(node.key)}> Add Child </Button> </div> ); if (node.children) { return ( <Tree.TreeNode title={title} key={node.key}> {node.children.map((child) => renderTreeNode(child))} </Tree.TreeNode> ); } else { return <Tree.TreeNode title={title} key={node.key} />; } }; const renderCheckedList = () => { const checkedNodes = []; const traverseTree = (node) => { if (checkedKeys.includes(node.key)) { checkedNodes.push(node.title); } if (node.children) { node.children.forEach((child) => { traverseTree(child); }); } }; treeData.forEach((node) => { traverseTree(node); }); return ( <List header={<div>Checked Nodes</div>} bordered dataSource={checkedNodes} renderItem={(item) => <List.Item>{item}</List.Item>} /> ); }; return ( <div> <Tree checkable checkedKeys={checkedKeys} onCheck={onCheck}> {treeData.map((node) => renderTreeNode(node))} </Tree> {renderCheckedList()} </div> ); } export default TreeDemo; ``` 首先在`treeData`中为每个节点添加一个`children`属性,来表示子节点,然后在`renderTreeNode`方法中增加删除按钮和添加子节点按钮,并且分别绑定`onDelete`和`onAdd`方法。 `onDelete`方法用来删除节点,需要遍历整个树形数据,找到要删除的节点,并且将其从父节点的`children`数组中移除。 `onAdd`方法用来添加子节点,需要在当前节点下添加一个新节点,并且更新树形数据。 最后在`Tree`组件中使用`renderTreeNode`方法来渲染树形结构,并且使用`checkedKeys`属性来绑定勾选状态,使用`onCheck`事件来监听勾选状态的变化。 同时,通过`renderCheckedList`方法来渲染勾选的节点列表,遍历整个树形数据,将勾选的节点的标题存储到`checkedNodes`数组中,最后使用`List`组件将列表展示出来。

相关推荐

最新推荐

recommend-type

hadoop动态增加和删除节点方法介绍

主要介绍了hadoop动态增加和删除节点方法介绍,小编觉得挺不错的,这里分享给大家,需要的朋友可以参考。
recommend-type

PI节点的在线率,节点收益,输入数据,版本号解析

1,为什么别人的节点输入数据很多,我的是却是很低甚至是零, 2,我的节点什么时候会出在线率 3,我的节点什么时候会有收益 4,节点已经运行很长时间了,到底会得到节点奖励 5, 0.4.5和0.4.7版本有什么区别
recommend-type

Activiti12流程跟踪任务节点和线高亮显示

Activiti12流程跟踪任务节点和线高亮显示,能标记流程所走过节点和线为红色,未走过的节点和线不标记,支持驳回和子流程。
recommend-type

基于MLVDS和USB3.0的多节点数据传输系统设计与实现

针对数据采集系统中上位机无法与多节点采集设备高速通信的问题,设计了一种基于MLVDS接口和USB3.0接口的数据传输系统。该传输系统采用CYUSB3014接口芯片实现计算机与FPGA的高速数据传输,采用ADN4693E接口芯片完成多...
recommend-type

DOM节点删除函数removeChild()用法实例

主要介绍了DOM节点删除函数removeChild()用法,实例分析了removeChild()函数实现结点删除的技巧,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。