React 代码分割 & loading 页面的实现
2020-07-14 06:13
841 查看
React.lazy 和 Suspense
const Component = React.lazy(() => import('./Component));
React.lazy函数可以实现动态引入组件,它会在组件首次渲染时,自动导入Component。
渲染lazy组件需要借助Suspense组件,它有一个fallback属性,可以传入在加载过程中想要展示的元素。
Suspence可以放置在懒加载组件之上的任何位置。
在路由进行代码分割
原先页面加载时,默认会把路由上的所有组件一起加载过来(比如Home、Detail、Login等页面),虽然这样能够让
页面切换时间变短,但会严重影响首屏的加载时间,因此有必要对路由中的组件进行代码分割,实现懒加载:
import React, { Suspense, lazy } from 'react'; //懒加载 const Header = lazy(()=>import('./common/header')); const Detail = lazy(()=>import('./pages/detail')); const Login = lazy(()=>import('./pages/login')); const Register = lazy(()=>import('./pages/register')); const Footer = lazy(()=>import('./common/footer'));
<BrowserRouter> <Suspense fallback={<div>loading...</div>}> <Route path={["/detail/:id", "/"]} exact component={Header}/> <Route path='/' exact component={Home}/> <Route path='/detail/:id' component={Detail}/> <Route path='/login' component={Login}/> <Route path='/register' component={Register}/> <Route path={["/detail/:id", "/"]} exact component={Footer}/> </Suspense> </BrowserRouter>
如此编写后,我们发现页面在加载和切换时会加载fallback中的loading,切换所需时间明显延长,但用户是可以接受的。
loading 美化
<Suspense fallback={<Loading><Spin size="large" /></Loading>}>
其中Spin是AntD引入的组件,Loading则封装了容器的样式(Styled-Component):
export const Loading = styled.div` width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; `;
这样我们就可以实现一个在屏幕中央的loading效果。
相关文章推荐
- react 实现页面代码分割、按需加载的方法
- react-router 4实现代码分割(code spliting)
- ReactNative页面跳转Navigator实现的示例代码
- React配合Webpack实现代码分割与异步加载
- XHTML,CSS 秘密技术 定义列表代替实现页面的布局,表单提交 操作 附原代码。
- js统计页面的来访次数实现代码
- AJAX调用页面后台代码方法实现下拉框二级联动效果
- 通过componentWillReceiveProps()实现React左右父子页面的联动效果
- js统计页面的来访次数实现代码
- 基于jquery的防止大图片撑破页面的实现代码(立即缩放)
- 网页页面实现自动刷新的3种代码
- jquery实现页面控件拖动效果js代码
- PHP中页面与代码分离的实现
- python与php实现分割文件代码
- 页面文件上传java代码实现
- 利用JS自动打开页面上链接的实现代码
- iOS现成的引导页面的实现:纯代码
- .net页面访问次数统计实现原理与代码
- jquery 查找iframe父级页面元素的实现代码
- js实现类似MSN提示的页面效果代码分享