import './menu-tree.css'; import {useState} from "react"; import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' import {faCaretRight, faCaretDown, faEdit, faPlus, faRemove} from '@fortawesome/free-solid-svg-icons'; import {IMenuTree, IMenuTreeItem} from "../../interfaces/menu/IMenuTree.ts"; export default function MenuTree(props: IMenuTree) { const [menusArray, setMenuArray] = useState([ { id: '1', name: '一级目录', active: true, level: 1, children: [ { id: '1-1', name: '二级目录', active: false, level: 1, children: [ { id: '1-1-1', name: '三级目录', active: false, level: 1, children: [] } ] } ] } ]); const triggerChildren = (item: IMenuTreeItem) => { item.active = !item.active; setMenuArray([ ...menusArray ]); } const renderMenu = (children: Array, parent?: IMenuTreeItem) => { if (!children || children.length == 0) { return <> } const lis = children.map((item, index) => { const isParent = item.children && item.children.length > 0; const icon = item.active ? faCaretDown : faCaretRight; const renderChildrenMenu = renderMenu(item.children, item); return (
  • {isParent ? { triggerChildren(item) }}/> : <>} { triggerChildren(item) }}>{item.name}
    {renderChildrenMenu}
  • ) }) const active = parent ? parent.active : true; return } const menuUl = renderMenu(menusArray); return
    {menuUl}
    }