// frontend-react/src/App.jsx import React, { useCallback, useEffect, useRef } from 'react'; // ✅ 移除 useState import TopBar from './components/TopBar'; import { ChatBox } from './components/Mid'; import SideBarLeft from './components/SideBarLeft'; import SideBarRight from './components/SideBarRight'; import useAppLayoutStore from './Store/AppLayoutSlice'; // ✅ 新增 import './index.css'; function App() { // ✅ 从 AppLayoutStore 获取状态和方法 const { layoutMode, sidebarMode, isSidebarHovered, colorTheme, setLayoutMode, setSidebarMode, setSidebarHovered, setColorTheme } = useAppLayoutStore(); // 防抖定时器引用 const hoverTimeoutRef = useRef(null); const leaveTimeoutRef = useRef(null); // 处理鼠标进入左侧栏 - 使用 useCallback 优化 const handleMouseEnter = useCallback(() => { if (sidebarMode === 'smart') { // 清除之前的离开定时器 if (leaveTimeoutRef.current) { clearTimeout(leaveTimeoutRef.current); } // 设置防抖延迟后展开 hoverTimeoutRef.current = setTimeout(() => { setSidebarHovered(true); // ✅ 使用 store 方法 setLayoutMode('edit'); }, 400); // 400ms 防抖 } }, [sidebarMode, setSidebarHovered, setLayoutMode]); // 处理鼠标离开左侧栏 - 使用 useCallback 优化 const handleMouseLeave = useCallback(() => { if (sidebarMode === 'smart') { // 清除之前的进入定时器 if (hoverTimeoutRef.current) { clearTimeout(hoverTimeoutRef.current); } // 设置延迟收起,给用户反应时间 leaveTimeoutRef.current = setTimeout(() => { setSidebarHovered(false); // ✅ 使用 store 方法 setLayoutMode('chat'); }, 250); // 250ms 延迟 } }, [sidebarMode, setSidebarHovered, setLayoutMode]); // 清理定时器 useEffect(() => { return () => { if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current); if (leaveTimeoutRef.current) clearTimeout(leaveTimeoutRef.current); }; }, []); return (
{/* ✅ TopBar 不再需要 props,直接从 Store 读取状态 */} {/* 主内容容器 */}
{/* 左侧栏 - 智能模式下悬停展开 */}
{/* 中间栏:聊天框 */}
{/* 右侧栏 */}
); } export default App;