问题描述:点击左侧路由切换会出现闪屏的情况
页面的效果
解决方案
完整代码
import { lazy, Suspense, ReactNode } from "react";
import { Navigate, useLocation } from "react-router-dom";
import LayOut from '../pages/LayOut/LayOut'
import NotFound from '../pages/NotFound/NotFound'
const LoginIndex = lazy(() => import('../pages/LoginIndex/LoginIndex'))
const DashBoard = lazy(() => import('../pages/DashBoard/DashBoard'))
const UserInfo = lazy(() => import('../pages/UserInfo/UserInfo'))
const SettingPage = lazy(() => import('../pages/SettingPage/SettingPage'))
const ItemList = lazy(() => import('../pages/ItemList/ItemList'))
const GoodsList = lazy(() => import('../pages/GoodsList/index'))
const BannerList = lazy(() => import('../pages/BannerList/index'))
const laztRoutes = (element: ReactNode): ReactNode => {
return <Suspense fallback={<div>Loading...</div>}>
{element} </Suspense>
}
const RequireAuth = ({ children }: { children: ReactNode }): ReactNode => {
const location = useLocation();
const token = localStorage.getItem('token'); // 假设token存储在localStorage中
if (!token) {
return <Navigate to="/login" state={{ from: location }} replace />;
}
return children;
}
export default [
{
path: '/',
element: <Navigate to='/dashboard' />,
},
{
path: '/',
element: <RequireAuth><LayOut /></RequireAuth>,
children: [
{
path: '/dashboard',
element: laztRoutes(<DashBoard />)
},
{
path: '/userinfo',
element: laztRoutes(<UserInfo />)
},
{
path: '/setting',
element: laztRoutes(<SettingPage />)
},
{
path: '/itemlist',
element: laztRoutes(<ItemList />)
},
{
path: '/goods',
element: laztRoutes(<GoodsList />)
},
{
path: '/banner',
element: laztRoutes(<BannerList />)
}
]
},
{
path: '/login',
element: <LoginIndex />
},
{
path: '*',
element: <NotFound />
}
]