React 框架 + ant design DirectoryTree 添加搜索框

在React 框架里使用ant design,ant design tree 组件网址:https://ant-design.gitee.io/components/tree-cn/

  //导入antd;
import { Tree } from 'antd';
const { DirectoryTree } = Tree;

//创建组件
class Search extends React.Component{
  constructor(props) {
        super(props);
       this.state = {
           select_treenodes:[ ],
           expandFlag:[ ],
           tree_data:[ ],
     }
}
onSelect = (selectedKeys, info) => {
   //点击树节点触发事件可以打印selectedKeys,info查看它的值
     }

// 展开/收起节点时触发(把指定张开的父节点重新赋值;如果加了 expandedKeys,就必须用这一步,不然不能展开节点以及收起节点)
    onExpand=(expandedKeys, {expanded: bool, node})=>{
        console.log(expandedKeys);
        this.setState({
            expandFlag:expandedKeys,
        }
    }

//当搜索框输入时触发
SearchChange = (e)=>{
        console.log(e.target.value) //输入的值打印
        let data = this.state.tree_data; //节点数据;
        //遍历节点数据
        for(let i =0; i <data[0].children.length; i++){
            if(data[0].children[i].title == e.target.value){  //如果输入的值等于节点的title,把节点张开,标记节点;
                console.log(data[0].children[i].key) //打印key,如果key是number类型则要转化成String类型;
                this.setState({
                    select_treenodes:[data[0].children[i].key], //设置选中的树节点
                    expandFlag:[String(data[0].key)],    //展开指定父节点
                })
            }
        }
        console.log(this.state.tree_data)
}
//渲染
render(){
          //tree数据
      const treeData = [
                   {
                   title: 'parent 0',
                   key: '0-0',
                 children: [
                    { title: 'leaf 0-0', key: '0-0-0', isLeaf: true },
                    { title: 'leaf 0-1', key: '0-0-1', isLeaf: true },
                    ],
                },
                {
                 title: 'parent 1',
                 key: '0-1',
                children: [
               { title: 'leaf 1-0', key: '0-1-0', isLeaf: true },
               { title: 'leaf 1-1', key: '0-1-1', isLeaf: true },
              ],
            },
    ];
    this.state.tree_data =  treeData  //节点值赋值给state 的tree_data;
   return(
         <div>
             <Search style={{ marginBottom: 8 }} placeholder="search" onChange={this.SearchChange} /> //搜索框
                 <DirectoryTree
                      multiple   //支持点选多个节点(节点本身)boolean类型;
                      onSelect={this.onSelect}  //点击树节点触发;
                      selectedKeys={this.state.select_treenodes}  //(受控)设置选中的树节点;
                       // 展开指定的树节点
                      expandedKeys={this.state.expandFlag}   //(受控)展开指定的树节点(注意,这个一定要与onExpand一起用,不然不能关闭和展开树节点;
                        onExpand={this.onExpand}  //    展开/收起节点时触发;
                         treeData={treeData} />   //数据
        </div>

   )
}
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 持续更新中...... 一套企业级的 UI 设计语言和 React 实现。 https://mobile.ant....
    日不落000阅读 6,102评论 0 35
  • 学习资料 vue github (里面包含了vue, vuex, vue-cli等源码) vue-cli 官网 v...
    pauljun阅读 9,306评论 2 17
  • 傷寒傷風之證,感之既速,應之亦速,若對症治療,去之亦速,若錯謬則亡之亦速。 今世之人,衣錦食玉,以車代步,毫無勞...
    叶落岁暮阅读 285评论 11 4
  • Vim 与GCC概述
    Aero小白阅读 111评论 0 0
  • 大家好,我是吾小趣成人用品的小编,很多都在问小编,有哪些不花钱的网店推广方法,想不花钱的话,办法也有啊,但是不花钱...
    吾小趣阅读 585评论 0 1

友情链接更多精彩内容