import React, {useEffect, useMemo, useState} from 'react'; import { Input, Tree } from 'antd'; import {FolderOutlined,FileMarkdownOutlined} from '@ant-design/icons'; const { Search } = Input; import store from "../../redux/store"; 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; }; function generateChildList(fileList){ const result = [] for (let i = 0; i < fileList.length; i++) { const {fileName,dir}=fileList[i]; result.push({ "key":fileName, "title":fileName, "icon":, "children":[] }); } return result; } const ItemTree = () => { useEffect(()=>{ store.subscribe(() =>{ console.log("打开目录") let fileDirDate = store.getState().dirMessage.data; for (let i = 0; i < fileDirDate.length; i++) { const node = fileDirDate[i]; console.log('dataNode:',node) const { fileDir,fileList } = node; const childList=[] if (fileList) { childList.push(generateChildList(fileList)); } defaultData.push({ "key":fileDir, "title":fileDir, "icon":, "children":childList }); } setDefaultValueState(defaultData) }) },defaultData) const [expandedKeys, setExpandedKeys] = useState([]); const [searchValue, setSearchValue] = useState(''); const [defaultValueState, setDefaultValueState] = 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;