/** * @fileoverview 应用程序入口文件 * @description 负责初始化 React 应用、路由、状态管理和设计模式桥接 */ import React from 'react'; import ReactDOM from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { create } from 'zustand'; import { subscribeWithSelector } from 'zustand/middleware'; import { devtools } from 'zustand/middleware'; import { AnimatePresence } from 'framer-motion'; // 导入应用样式 import './index.css'; // 导入主要组件 import App from './App'; // 创建设计模式状态存储 const useDesignModeStore = create<{ isDesignModeEnabled: boolean; selectedComponent: any; hoveredComponent: any; componentTree: any[]; toggleDesignMode: () => void; setSelectedComponent: (component: any) => void; setHoveredComponent: (component: any) => void; setComponentTree: (tree: any[]) => void; clearSelection: () => void; }>()( devtools( subscribeWithSelector((set, get) => ({ // 设计模式状态 isDesignModeEnabled: true, selectedComponent: null, hoveredComponent: null, componentTree: [], // 操作方法 toggleDesignMode: () => set((state) => ({ isDesignModeEnabled: !state.isDesignModeEnabled })), setSelectedComponent: (component) => set({ selectedComponent: component }), setHoveredComponent: (component) => set({ hoveredComponent: component }), setComponentTree: (tree) => set({ componentTree: tree }), // 清除选择 clearSelection: () => set({ selectedComponent: null, hoveredComponent: null }), })), { name: 'design-mode-store', } ) ); // 创建 React Query 客户端配置 const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 1000 * 60 * 5, // 5分钟 gcTime: 1000 * 60 * 30, // 30分钟 retry: (failureCount, error) => { if (error instanceof Error && error.message.includes('404')) { return false; } return failureCount < 3; }, refetchOnWindowFocus: false, }, mutations: { retry: 1, }, }, }); // 错误处理组件 const ErrorBoundary: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [hasError, setHasError] = React.useState(false); const [error, setError] = React.useState(null); React.useEffect(() => { const handleError = (error: ErrorEvent) => { console.error('Global error caught:', error); setHasError(true); setError(error.error || new Error(error.message)); }; const handleUnhandledRejection = (event: PromiseRejectionEvent) => { console.error('Unhandled promise rejection:', event.reason); setHasError(true); setError(event.reason instanceof Error ? event.reason : new Error(String(event.reason))); }; window.addEventListener('error', handleError); window.addEventListener('unhandledrejection', handleUnhandledRejection); return () => { window.removeEventListener('error', handleError); window.removeEventListener('unhandledrejection', handleUnhandledRejection); }; }, []); if (hasError) { return (

Application Error

Something went wrong while loading the application. Please try refreshing the page.

{error && (
Error Details
                {error.message}
                {error.stack && `\n\n${error.stack}`}
              
)}
); } return <>{children}; }; // 主应用组件 const RootApp: React.FC = () => { return ( ); }; // 渲染应用 const rootElement = document.getElementById('root'); if (!rootElement) { throw new Error('Root element not found'); } const root = ReactDOM.createRoot(rootElement); root.render(); // 开发环境下的热模块替换 if (import.meta.hot) { import.meta.hot.accept(); } // 设计模式桥接(如果存在) declare global { interface Window { __APPDEV_DESIGN_MODE__?: { store: typeof useDesignModeStore; toggleDesignMode: () => void; selectComponent: (component: any) => void; highlightComponent: (component: any) => void; }; } } // 初始化设计模式桥接 if (typeof window !== 'undefined') { window.__APPDEV_DESIGN_MODE__ = { store: useDesignModeStore, toggleDesignMode: () => useDesignModeStore.getState().toggleDesignMode(), selectComponent: (component) => useDesignModeStore.getState().setSelectedComponent(component), highlightComponent: (component) => useDesignModeStore.getState().setHoveredComponent(component), }; } export { useDesignModeStore }; export default RootApp;