【React】React的懒加载组件lazy和Suspense

在一个多路由项目中,页面加载时,所有的路由组件都会被加载
如果我们有很多个路由组件,但是用户只点击了几个,这就会有很大的消耗,因此我们需要做懒加载处理,我们点击哪个时,才去加载哪一个
而React当然想到了这一点,给我们提供了LazyLoad。

用法

首先我们需要从 react 库中暴露一个 lazy 函数

import React, { Component ,lazy} from 'react';

然后我们需要更改引入组件的方式,作为懒加载组件引入

const Home = lazy(() => import('./Home'))
const About = lazy(() => import('./About'))

路由组件加载需要时间,此时页面会白屏,需要指定一个loading组件作为新组件还没加载出来时的过渡,用Suspense包裹所有路由组件,在Suspense的fallback属性放入loading组件作为过渡

<Suspense fallback={<loading/>}>
    <Route path="/home" component={Home}></Route>
    <Route path="/about" component={About}></Route>
</Suspense>

注意: loading 必须提前引入,不能懒加载,否则就会陷入死循环
例:import Loading from ‘./Loading’

完整代码

import React, { Component,lazy,Suspense} from 'react'
import {NavLink,Route} from 'react-router-dom'

// import Home from './Home'
// import About from './About'

import Loading from './Loading'
const Home = lazy(()=> import('./Home') )
const About = lazy(()=> import('./About'))

export default class Demo extends Component {
	render() {
		return (
			<div>
				<div className="row">
					<div className="col-xs-offset-2 col-xs-8">
						<div className="page-header"><h2>React Router Demo</h2></div>
					</div>
				</div>
				<div className="row">
					<div className="col-xs-2 col-xs-offset-2">
						<div className="list-group">
							{/* 在React中靠路由链接实现切换组件--编写路由链接 */}
							<NavLink className="list-group-item" to="/about">About</NavLink>
							<NavLink className="list-group-item" to="/home">Home</NavLink>
						</div>
					</div>
					<div className="col-xs-6">
						<div className="panel">
							<div className="panel-body">
								<Suspense fallback={<Loading/>}>
									{/* 注册路由 */}
									<Route path="/about" component={About}/>
									<Route path="/home" component={Home}/>
								</Suspense>
							</div>
						</div>
					</div>
				</div>
			</div>
		)
	}
}

相关推荐

  1. 【React】React组件lazySuspense

    2024-05-14 06:30:11       11 阅读
  2. Vue3: Suspense异步组件

    2024-05-14 06:30:11       40 阅读
  3. vue组件载有什么区别

    2024-05-14 06:30:11       35 阅读
  4. Vue3优化之实现组件异步

    2024-05-14 06:30:11       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-14 06:30:11       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-14 06:30:11       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-14 06:30:11       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-14 06:30:11       20 阅读

热门阅读

  1. 搜维尔科技:Patchwork 3D 新功能:爆炸视图动画

    2024-05-14 06:30:11       15 阅读
  2. 数据赋能(86)——数据要素:管理核心框架

    2024-05-14 06:30:11       7 阅读
  3. 上海理工大学程序设计 F十六进制的异或

    2024-05-14 06:30:11       12 阅读
  4. IPC通信中间件综述

    2024-05-14 06:30:11       10 阅读
  5. 安卓手机APP开发__支持不同的像素深度

    2024-05-14 06:30:11       15 阅读