"use client"; import { MoreVertical, X } from "lucide-react"; import { useEffect, useRef, useState } from "react"; interface MoreMenuProps { children: React.ReactNode; } export function MoreMenu({ children }: MoreMenuProps) { const [isOpen, setIsOpen] = useState(false); const menuRef = useRef(null); const buttonRef = useRef(null); // 点击外部关闭菜单 useEffect(() => { if (!isOpen) return; const handleClickOutside = (event: MouseEvent) => { if ( menuRef.current && buttonRef.current && !menuRef.current.contains(event.target as Node) && !buttonRef.current.contains(event.target as Node) ) { setIsOpen(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, [isOpen]); return (
{/* 更多按钮 */} {/* 弹出菜单 */} {isOpen && (
{children}
)}
); } interface MoreMenuItemProps { icon: React.ReactNode; label: string; onClick: () => void; } export function MoreMenuItem({ icon, label, onClick }: MoreMenuItemProps) { return ( ); }