React--Tree 点击节点收缩
时间:2020-03-26
本文章向大家介绍React--Tree 点击节点收缩,主要包括React--Tree 点击节点收缩使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
项目使用ant-design +react 做的前端,有天来了个需求来说,展示地区的树点击节点也得能展开收缩子节点;
react 的树组件中有点击左边的小三角号收缩的,但是不支持点击右边的节点收缩
所以得自己实现了。(可能是我没找到支持的办法)
代码
dom:
<Tree
onExpand={this.onExpand}//展开的触发方法(点击左侧三角号触发的方法)
expandedKeys={expandedKeys}//展开的数组
autoExpandParent={autoExpandParent}//布尔值
onSelect={this.onSelectTree}//选择的时候触发方法(即点击节点的时候的触发方法)
>
此中可以看出,要想实现所说功能,只能从onSelect
这个地方下手,但是还要和onExpand
这个自带的收缩的方法联动,即点击三角号展开后,点击右侧节点,知道此节点的子节点已经展开,应当做关闭操作。
js
state = {
expandedKeys: [],
temkeys: [],
searchValue: '',
autoExpandParent: true,
selectedItem: {},
};
onExpand = expandedKeys => {
console.log(expandedKeys)
this.setState({
expandedKeys,
autoExpandParent: false,
});
};
onSelectTree = (selectedKeys, info) => {
let flag = info.event && info.selectedNodes.length === 1 && !info.selectedNodes[0].props.children;
// 没有 children 代表当前已没有下一级目录
if (!flag) {
if (info.selected) {
this.changekeys(info,selectedKeys[0])
} else {
this.changekeys(info,info.node.props.eventKey)
}
}
const {onEditItem, form: {getFieldDecorator, validateFields, getFieldsValue, setFieldsValue}} = this.props
let treeList = this.props.data.list
if (!isEmpty(treeList)) {
for (let index = 0; index < treeList.length; index++) {
if (selectedKeys[0] == treeList[index].id + '') {
this.setState({selectedItem: treeList[index]}, () => {
setFieldsValue({parentId: this.state.selectedItem.parentId});
setFieldsValue({name: this.state.selectedItem.name});
})
}
}
}
}
changekeys = (info,currentKey)=>{
let {temkeys} = this.state
if (info.node.props.expanded) {
//这个时候要把自身去掉
temkeys = temkeys.filter(item => {
if (item != currentKey) {
return true;
}
})
for (let i = 0; i < temkeys.length; i++) {
if (temkeys[i] === undefined) {
arr1.splice(i, 1)
// i - 1 ,因为空元素在数组下标 2 位置,删除空之后,后面的元素要向前补位
i = i - 1
}
}
let expandedKeys = temkeys
this.setState({
temkeys,
expandedKeys,
autoExpandParent: false,
});
} else {
//加上自身
temkeys.push(info.node.props.eventKey);
let expandedKeys = temkeys
this.setState({
temkeys,
expandedKeys,
autoExpandParent: false,
});
}
}
原文地址:https://www.cnblogs.com/jjiaper/p/12573259.html
- Golang通过socket与java通讯
- Java基础-day09-基础题-对象;类;封装
- 通过shell脚本得到数据库的基本信息(一)(r9笔记第89天)
- iOS设备唯一标识的前世今生
- python 生成内嵌式字典(dict)-案例从python提取内嵌json写入mongodb
- Golang语言打印九九乘法表
- AVFoundation 框架初探究(四)
- Data Guard跳归档恢复的实践(r9笔记第92天)
- AVFoundation 框架初探究(三)
- AVFoundation 框架初探究(二)
- 关于视图和存储过程的权限问题探究 (r9笔记第87天)
- Java基础-day08-超市购物系统总结
- AVFoundation 框架初探究(一)
- 【Go 语言社区】 HTML5 前端--数据保存实例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微信小程序实战开发六:使用weui-flex创建一个可自由配置的布局组件。
- JDBCJava连接MySql数据库
- Python中的集合
- Centos7下误删python2和yum的解决办法
- Java正则表达式匹配日期及基本使用
- VM虚拟机中linux centOS 联网单网卡配置教程
- Python操作redis数据库
- pytest 测试框架学习(1):初识
- 爬虫工程师也应该会的 NodeJS 知识(三)- 快速抛弃 execjs
- 八皇后问题Python实现
- 进击吧!Pythonista(6/100)
- 进击吧!Pythonista(9/100)
- 数据结构基础(一)数组,矩阵
- pytest 测试框架学习(3):pytest.approx
- pytest 测试框架学习(4):pytest.fail