import React, { useMemo, useState } from 'react'; import { Input, Tree } from 'antd'; import {FolderOutlined,FileMarkdownOutlined} from '@ant-design/icons'; const { Search } = Input; // const x = 3; // const y = 2; // const z = 1; const defaultData = [ { "title": "/media/shixiaohua/homedisk", "key": "0-0", "icon": , "children": [ { "title": "electron", "key": "0-0-0", "icon": , "children": [ { "title": "leaf", "key": "0-0-0-0", "icon": } ] } ] }, { "title": "media", "key": "0-1", "icon": , "children": [] } ]; // 将树平铺用于查找 const dataList = []; const generateList = (data) => { for (let i = 0; i < data.length; i++) { const node = data[i]; const { key,title,icon } = node; dataList.push({ key, title, icon }); if (node.children) { generateList(node.children); } } }; generateList(defaultData); const getParentKey = (key, tree) => { let parentKey; for (let i = 0; i < tree.length; i++) { const node = tree[i]; if (node.children) { if (node.children.some((item) => item.key === key)) { parentKey = node.key; } else if (getParentKey(key, node.children)) { parentKey = getParentKey(key, node.children); } } } return parentKey; }; const ItemTree = () => { const [expandedKeys, setExpandedKeys] = useState([]); const [searchValue, setSearchValue] = useState(''); const [autoExpandParent, setAutoExpandParent] = useState(true); const onExpand = (newExpandedKeys) => { setExpandedKeys(newExpandedKeys); setAutoExpandParent(false); }; const onChange = (e) => { const { value } = e.target; const newExpandedKeys = dataList .map((item) => { if (item.title.indexOf(value) > -1) { return getParentKey(item.key, defaultData); } return null; }) .filter((item, i, self) => !!(item && self.indexOf(item) === i)); setExpandedKeys(newExpandedKeys); setSearchValue(value); setAutoExpandParent(true); }; const treeData = useMemo(() => { const loop = (data) => data.map((item) => { const strTitle = item.title; const index = strTitle.indexOf(searchValue); const beforeStr = strTitle.substring(0, index); const afterStr = strTitle.slice(index + searchValue.length); const title = index > -1 ? ( {beforeStr} {searchValue}{afterStr} ) : ( {strTitle} ); if (item.children) { return { title, key: item.key, icon: item.icon, children: loop(item.children), }; } return { title, icon: item.icon, key: item.key, }; }); return loop(defaultData); }, [searchValue]); return (
); }; export default ItemTree;