This commit is contained in:
Wang Kejun 2022-08-02 14:58:51 +08:00
parent 6c8125beb2
commit 7b60a3b7c4
4 changed files with 47 additions and 81 deletions

View File

@ -1,30 +1,32 @@
import React, { useState } from 'react'; import React from 'react';
import { Routes, Route } from 'react-router-dom'; import { Routes, Route } from 'react-router-dom';
import { Button, Drawer } from 'tdesign-react';
import { ChevronUpIcon } from 'tdesign-icons-react'
import './App.less'; import './App.less';
import LazyLoad from './utils/lazyLoad'; import Loading from './template/Loading';
const Console = LazyLoad(() => import('./template/console')); const Console = React.lazy(() => import('./template/console'));
const Frontend = LazyLoad(() => import('./template/frontend')); const Frontend = React.lazy(() => import('./template/frontend'));
const NotFound = LazyLoad(() => import('./template/notFound')); const NotFound = React.lazy(() => import('./template/notFound'));
const Message = LazyLoad(() => import('@oak-general-business/components/message')); const Message = React.lazy(() => import('@oak-general-business/components/message'));
const DebugPanel = LazyLoad(() => import('@oak-general-business/components/Func/debugPanel')); const DebugPanel = React.lazy(() => import('@oak-general-business/components/func/debugPanel'));
type Router = { type Router = {
path: string; path: string;
element: ReturnType<typeof LazyLoad>; element: React.LazyExoticComponent<React.ComponentType<any>>;
title: string; title: string;
} };
function getRoutes(routers2: Router[], namespace?: string) { function getRoutes(routers2: Router[], namespace?: string) {
return routers2.map((router, index) => { return routers2.map((router, index) => {
const { path, element } = router; const { path, element: Component } = router;
return ( return (
<Route <Route
key={`route_${namespace ? `${namespace}_` : ''}${index}`} key={`route_${namespace ? `${namespace}_` : ''}${index}`}
path={path} path={path}
element={element} element={
<React.Suspense fallback={<Loading />}>
<Component />
</React.Suspense>
}
></Route> ></Route>
); );
}); });
@ -33,54 +35,46 @@ function getRoutes(routers2: Router[], namespace?: string) {
let routers: Router[] = []; let routers: Router[] = [];
function App() { function App() {
const [visible, setVisible] = useState(false);
const handleClick = () => {
setVisible(true);
};
const handleClose = () => {
setVisible(false);
};
return ( return (
<React.Fragment> <React.Fragment>
{Message} <React.Suspense>
<Message />
</React.Suspense>
<Routes> <Routes>
<Route path="/console" element={Console}> <Route
path="/console"
element={
<React.Suspense fallback={<Loading />}>
<Console />
</React.Suspense>
}
>
{getRoutes(routers, 'console')} {getRoutes(routers, 'console')}
</Route> </Route>
<Route path="/" element={Frontend}> <Route
path="/"
element={
<React.Suspense fallback={<Loading />}>
<Frontend />
</React.Suspense>
}
>
{getRoutes(routers)} {getRoutes(routers)}
</Route> </Route>
<Route path="*" element={NotFound} /> <Route
</Routes> path="*"
{ element={
process.env.NODE_ENV === "development" && ( <React.Suspense fallback={<Loading />}>
<React.Fragment> <NotFound />
<Button </React.Suspense>
variant="text"
shape="circle"
theme="primary"
icon={<ChevronUpIcon />}
style={{
position: 'absolute',
bottom: 0,
right: '45vw',
}}
onClick={handleClick}
/>
<Drawer
placement="bottom"
visible={visible}
onClose={handleClose}
header={<text>debug控制台</text>}
footer={<div/>}
>
{DebugPanel}
</Drawer>
</React.Fragment>
)
} }
/>
</Routes>
{process.env.NODE_ENV === 'development' && (
<React.Suspense>
<DebugPanel />
</React.Suspense>
)}
</React.Fragment> </React.Fragment>
); );
} }

View File

@ -4,21 +4,6 @@ import { useNavigate, useParams, useSearchParams, useLocation } from 'react-rout
import { Routes, Route, Outlet } from 'react-router-dom'; import { Routes, Route, Outlet } from 'react-router-dom';
// function Console() {
// const n = useNavigate();
// const d = useParams();
// const [search, setSearch] = useSearchParams();
// const id = search.get('id');
// const l = useLocation();
// console.log(d, id, l);
// return <div onClick={() => {
// n('', { state: { name: '212' } })
// }}>console</div>;
// }
// export default Console;
function Console() { function Console() {
return ( return (
<Outlet /> <Outlet />

View File

@ -1,13 +0,0 @@
import React from "react";
import Loading from './Loading';
const LazyLoad = (factory: () => Promise<{ default: any }>) => {
const Component = React.lazy(factory);
return (
<React.Suspense fallback={<Loading />}>
<Component />
</React.Suspense>
);
};
export default LazyLoad;