Browse Source

优化路由实现

master
1549469775 4 years ago
parent
commit
10d451ff21
  1. 56
      src/AppRouter.tsx
  2. 36
      src/route.tsx

56
src/AppRouter.tsx

@ -6,40 +6,41 @@ import { pageList } from "@/plugins/pageHoc"
import Layout from "@/views/Layout" import Layout from "@/views/Layout"
import Auth from "@/ui/Auth" import Auth from "@/ui/Auth"
import routes,{Loading} from "./route" import routes from "./route"
function Wrapper(props: any) { function Wrapper(props: any) {
if (!props.isSub) { if (props.loading) {
return <React.Suspense fallback={<Loading></Loading>}>{props.children}</React.Suspense> return <React.Suspense fallback={<props.loading></props.loading>}>{props.children}</React.Suspense>
} }
return <Fragment>{props.children}</Fragment> return <Fragment>{props.children}</Fragment>
} }
function RouteMap(props: any) { function RouteMap(props: any) {
const routes: any[] = props.routes const routes: any[] = props.routes
const isSub: boolean = props.isSub
return ( return (
<Wrapper isSub={isSub}> <Switch>
<Switch> {routes.map((route, index) => {
{routes.map((route, index) => { const { exact = false } = route
const { exact = false } = route if (route.redirect) {
if (route.redirect) { return (
return ( <Route key={index} path={route.path} exact={exact}>
<Route key={index} path={route.path} exact={exact}> <Redirect to={route.redirect}></Redirect>
<Redirect to={route.redirect}></Redirect> </Route>
</Route> )
) }
} if (route.component) {
if (route.component) { return (
return ( <Auth key={index} needAuth={!!route.meta?.auth} path={route.path} exact={exact}>
<Auth key={index} needAuth={!!route.meta?.auth} path={route.path} exact={exact}> <Wrapper loading={route.loading}>
<route.component meta={route.meta}>{route.children && <RouteMap routes={route.children} isSub></RouteMap>}</route.component> <route.component meta={route.meta}>
</Auth> {route.children && <RouteMap routes={route.children}></RouteMap>}
) </route.component>
} </Wrapper>
})} </Auth>
</Switch> )
</Wrapper> }
})}
</Switch>
) )
} }
@ -48,11 +49,12 @@ export default function () {
return ( return (
<Router> <Router>
<Layout <RouteMap routes={routes}></RouteMap>
{/* <Layout
render={() => { render={() => {
return <RouteMap routes={routes}></RouteMap> return <RouteMap routes={routes}></RouteMap>
}} }}
></Layout> ></Layout> */}
</Router> </Router>
) )
} }

36
src/route.tsx

@ -1,34 +1,54 @@
import Home from "@/views/Home"
import About from "@/views/About"
import Page404 from "@/views/Auth/Page404" import Page404 from "@/views/Auth/Page404"
import React, {lazy} from "react" import React, { lazy } from "react"
function Test() { function Test() {
return <div>TExtas</div> return <div>TExtas</div>
} }
export const Loading = ()=><div>Loding...</div> const Loading = (props: any) => <div style={{ color: props.color }}>Lodeing.22..</div>
let delay =
(Comp: any, duration = 1000) =>
() =>
new Promise<any>(resolve =>
Comp()
.then((res: any) => {
setTimeout(() => {
resolve(res)
}, duration)
})
.catch(() => {
resolve({
default: () => <div>Error</div>,
})
})
)
export default [ export default [
{ {
path: "/about", path: "/about",
component: About, component: lazy(() => import("@/views/About")),
exact: false,
meta: { meta: {
auth: false, auth: false,
}, },
loading: () => <Loading color="red"></Loading>,
children: [ children: [
{ {
path: "/about/test", path: "/about/test",
exact: true,
meta: { meta: {
auth: false, auth: false,
}, },
component: lazy(()=>import("@/views/Login/Test")), loading: () => <Loading color="green"></Loading>,
component: lazy(delay(() => import("@/views/Login/Test"))),
}, },
], ],
}, },
{ {
path: "/home", path: "/home",
component: Home, component: lazy(() => import("@/views/Home")),
loading: () => <Loading color="blue"></Loading>,
meta: { meta: {
auth: false, auth: false,
}, },
@ -41,7 +61,7 @@ export default [
}, },
{ {
path: "/login", path: "/login",
component: lazy(() => import("@/views/Login")) component: lazy(() => import("@/views/Login")),
}, },
{ {
path: "*", path: "*",

Loading…
Cancel
Save