本文介绍了React实践之Tree组件,分享给大家,具体如下:
实现功能
- 渲染数据
- 展开合并
使用
数据结构:
const node = {
title: '00000',
key: '0' ,
level:'level1',
open: true,
child:[
{
title: '0-111111',
key: '0-0',
level:'level2',
open: true,
child:[
{
title: '0-1-1111',
key: '0-0-0',
level:'level3',
},
{
title: '0-1-2222',
key: '0-0-1',
level:'level3',
open: true,
child: [
{
title: '0-1-2-11111',
key: '0-0-1-0',
level:'level4',
open: true,
child: [
{
title: '0-1-2-1-111',
key: '0-0-1-0-0',
level:'level5',
}
]
}
]
},
{
title: '0-1-33333',
key: '0-0-4',
level:'level3',
},
]
},
{
title: '0-222222',
key: '0-2',
level:'level2',
open: false,
child: [
{
title: '0-2-1111',
key: '0-2-0',
level:'level3',
},
{
title: '0-2-22222',
key: '0-2-1',
level:'level3',
},
{
title: '0-2-33333',
key: '0-2-2',
level:'level3',
}
]
}
]
}
引用代码:
<div>
<Tree
treeList = {node}
/>
</div>
组件实现代码:
import React, { Component } from 'react';
import classNames from 'classnames';
const history = createHistory();
import {
BrowserRouter as Router,
HashRouter,
Route,
Link,
Switch,
NavLink
} from 'react-router-dom';
class Tree extends Component {
constructor(props){
super(props)
this.treeItemCroup = this.treeItemCroup.bind(this);
this.handleClick = this.handleClick.bind(this);
this.state ={
openList : false
}
}
handleClick(e) {
// 这是点击"rotate(-90deg)" "rotate(0deg)" : "rotate(-90deg)"
for(let item in e.target.parentNode.parentNode.childNodes){
// 点击的时候设置当前层级的子元素素隐藏
// 操作了DOM,我很难受
if(item > 0){
e.target.parentNode.parentNode.childNodes[item].style.display = e.target.parentNode.parentNode.childNodes[item].style.display === 'none' "true" className={iconChevron} onClick={this.handleClick.bind(this)}></i>
{this.itemTitle(itemGroup)}
</li>
{/* 调用tree方法 */}
{this.tree(itemGroup.child)}
</ul>
)
return itemGroupItem
}
tree(child){
let treeItem
// 如果有子元素
if(child){
// 子元素是数组的形式,把所有的子元素循环出来
treeItem = child.map((item, key) => {
// 同理,设置样式
let itemStyle = {
paddingLeft: 20*parseInt(item.level.slice(5), 10)+'px'
}
// 同理,设置"true" className={iconChevron} onClick={this.handleClick.bind(this)}></i>
{this.itemTitle(item)}
</li>
{/* 如果当前子元素还有子元素,就递归使用tree方法,把当前子元素的子元素渲染出来 */}
{this.tree(item.child)}
</ul>
)
})
}
return treeItem
}
render() {
return (
<div className="tree">
{ this.treeItemCroup(this.props.treeList) }
</div>
);
}
}
export default Tree;
效果图:
DOM结构图
代码我加了一些注释,可能还是比较难理清楚逻辑 😫
当前的逻辑我觉得有点混乱,希望看的朋友们能给出一点建议,感激不尽
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“React实践之Tree组件的使用方法”评论...
更新动态
2025年10月24日
2025年10月24日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]


