Skip to content

Commit a9fe5f1

Browse files
author
Sven
committed
feat: 使用react loadable 做懒加载
1 parent 8f3808c commit a9fe5f1

File tree

5 files changed

+42
-44
lines changed

5 files changed

+42
-44
lines changed

src/components/AsyncComponent.js

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/components/AsyncLoad.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import Loadable from 'react-loadable'
2+
import Loading from './Loading'
3+
4+
export default function AsyncLoad(opts) {
5+
return Loadable({
6+
...opts,
7+
loading: Loading,
8+
delay: 200,
9+
timeout: 2000,
10+
})
11+
};

src/components/Loading.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export default function Loading(props) {
1717
return <div>Loader timed out!</div>
1818
} else if (props.pastDelay) {
1919
// Display a loading screen after a set delay.
20-
return <Spinner name="cube-grid" color="purple" />
20+
return <Spinner name="cube-grid" color="purple" style={{ margin: 'auto' }} />
2121
} else {
2222
// Don't flash "Loading..." when we don't need to.
2323
return null

src/layouts/components/CustomHome.js

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,33 @@ import React from 'react'
22
import { Switch, Route } from 'react-router-dom'
33
import { Container } from 'reactstrap'
44

5-
import asyncComponent from 'components/AsyncComponent'
5+
import AsyncLoad from '../../components/AsyncLoad'
66
import Navbar from '../containers/NavbarContainer'
77

88
// `import()` 异步加载模块,魔法注释写chunkName
9-
const AsyncCounter = asyncComponent(() => import(
10-
/* webpackChunkName: "counter" */
11-
'routes/Counter'))
12-
const AsyncZen = asyncComponent(() => import(
13-
/* webpackChunkName: "zen" */
14-
'routes/Zen'))
15-
const AsyncElapse = asyncComponent(() => import(
16-
/* webpackChunkName: "elapse" */
17-
'routes/Elapse'))
18-
const AsyncRoute = asyncComponent(() => import(
19-
/* webpackChunkName: "route" */
20-
'routes/Route'))
21-
const AsyncPageNotFound = asyncComponent(() => import(
22-
/* webpackChunkName: "pageNotFound" */
23-
'routes/PageNotFound'))
24-
const AsyncHome = asyncComponent(() => import(
25-
/* webpackChunkName: "pageNotFound" */
26-
'routes/home'))
9+
export const AsyncCounter = AsyncLoad({
10+
loader: () => import(/* webpackChunkName: "counter" */'routes/Counter'),
11+
})
12+
13+
const AsyncZen = AsyncLoad({
14+
loader: () => import(/* webpackChunkName: "zen" */'routes/Zen'),
15+
})
16+
17+
const AsyncElapse = AsyncLoad({
18+
loader: () => import(/* webpackChunkName: "elapse" */'routes/Elapse'),
19+
})
20+
21+
const AsyncRoute = AsyncLoad({
22+
loader: () => import(/* webpackChunkName: "route" */'routes/Route'),
23+
})
24+
25+
const AsyncPageNotFound = AsyncLoad({
26+
loader: () => import(/* webpackChunkName: "pageNotFound" */'routes/PageNotFound'),
27+
})
28+
29+
export const AsyncHome = AsyncLoad({
30+
loader: () => import(/* webpackChunkName: "home" */'routes/Home'),
31+
})
2732

2833
export default function CustomHome() {
2934
return (

src/layouts/components/Navbar.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { Component } from 'react'
22
import { func } from 'prop-types'
33
import { Collapse, Navbar, NavbarToggler, NavbarBrand, Nav, NavLink } from 'reactstrap'
44
import { NavLink as Link } from 'react-router-dom'
5+
import { AsyncCounter } from './CustomHome'
56

67
export default class CustomNavbar extends Component {
78
static propTypes = {
@@ -23,14 +24,18 @@ export default class CustomNavbar extends Component {
2324
localStorage.setItem('LoginState', 'false')
2425
}
2526

27+
onMouseOver = () => {
28+
AsyncCounter.preload()
29+
}
30+
2631
render() {
2732
return (
2833
<Navbar color="faded" light toggleable>
2934
<NavbarToggler right onClick={this.toggle} />
3035
<NavbarBrand exact to="/" tag={Link}>Vortex React</NavbarBrand>
3136
<Collapse isOpen={this.state.isOpen} navbar>
3237
<Nav className="ml-auto" navbar>
33-
<NavLink to="/counter" tag={Link}>Counter</NavLink>
38+
<NavLink to="/counter" tag={Link} onMouseOver={this.onMouseOver}>Counter</NavLink>
3439
<NavLink to="/zenPage" tag={Link}>Zen</NavLink>
3540
<NavLink to="/elapse" tag={Link}>Elapse</NavLink>
3641
<NavLink to="/route/8080" tag={Link}>Route</NavLink>

0 commit comments

Comments
 (0)