import React, { useMemo } from 'react'; import { RouterProvider } from 'react-router-dom'; import { useSelector } from 'react-redux'; import { createDynamicRouter } from './router'; import type { RootState } from './store'; /** * 应用根组件 * * 架构说明: * 1. 使用 createBrowserRouter 创建路由实例 * 2. 路由实例在应用启动时基于菜单数据创建 * 3. 登录后通过页面刷新重新创建路由(稳定可靠) * * 注意: * React Router 6 的 createBrowserRouter 是静态的 * 不支持运行时动态替换路由实例 * 如需动态路由,登录后必须刷新页面 */ const App: React.FC = () => { const menus = useSelector((state: RootState) => state.user.menus); // 根据菜单状态创建路由 const router = useMemo(() => { return createDynamicRouter(); }, [menus]); return ; }; export default App;