初识React之路由懒加载
项目目前用的React Router版本是 V5
原理
- 利用React.lazy与import()实现了渲染时的动态加载
- 利用Suspense来处理异步加载资源时页面应该如何显示的问题
- 利用React.loadable实现组件按需加载
React.lazy
- 通过lazy()api来动态import需要懒加载的组件
- import的组件目前只支持export default的形式导出
1 | import { BrowserRouter as Router, Route } from 'react-router-dom'; |
Suspense
- Suspense来包裹懒加载的组件进行加载,可以设置fallback现实加载中效果
- fallback中也可以使用Loading组件
1
2
3
4
5
6
7
8
9
10
11import { BrowserRouter as Router, Route } from 'react-router-dom';
//引入Suspense从react中
import React,{lazy, Suspense} from 'react'
const Home = lazy(()=>import('./Home'))
return (
<Router>
<Suspense fallback={<h1>Loading....</h1>}>
<Route exact path="/" component={Home}/>
</Suspense>
</Router>
)
React.loadable
- react.loadable以组件级别来分割代码,不仅可以根据路由按需加载,还可以根据组件按需加载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25// 路由懒加载(异步组件)
import Loadable from 'react-loadable';
//通用过场组件
const LoadingComponent = () => {
return (
<div>loading</div>
)
}
export default (loader, loading=LoadingComponent) => {
return Loadable({
loader,
loading
})
}
//Route中调用
import { BrowserRouter, Route } from 'react-router-dom'
const loadable from './loadable';
const AnyComponent = loadable(() => import('./AnyComponent'))
const Routes = () => (
<BrowserRouter>
<Route path="/home" component={AnyComponent}/>
</BrowserRouter>
);
export default Routes;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 随心所欲录!
评论