React懒加载

定义

React.lazy 函数能让你像渲染常规组件一样处理动态引入(的组件)。
(1) 为什么代码要分割
当你的程序越来越大,代码量越来越多。一个页面上堆积了很多功能,也许有些功能很可能都用不到,但是一样下
载加载到页面上,所以这里面肯定有优化空间。就如图片懒加载的理论。
(2) 实现原理
当 Webpack 解析到该语法时,它会自动地开始进行代码分割(Code Splitting),分割成一个文件,当使用到这个文件的时候会这段代码才会被异步加载。
(3) 解决方案
在React.lazy 和常用的三方包react-loadable ,都是使用了这个原理,然后配合webpack进行代码打包拆分达到异步加载,这样首屏渲染的速度将大大的提高。
由于React.lazy 不支持服务端渲染,所以这时候react-loadable就是不错的选择

如何使用

下面示例代码使用create-react-app脚手架搭建:

//OtherComponent.js 文件内容
import React from 'react'
 const OtherComponent = ()=>{
 return (
 <div>
我已加载
</div>
 )
 }
 export default OtherComponent
 // App.js 文件内容
import React from 'react';
 import './App.css';
 //使用React.lazy导入OtherComponent组件
const OtherComponent = React.lazy(() => import('./OtherComponent'));
 function App() {
 return (
 <div className="App">
 <OtherComponent/>
 </div>
 );
 }
 export default App;

这是最简单的React.lazy ,但是这样页面会报错。这个报错提示我们,在React使用了。lazy 之后,会存在一个加
载中的空档期,React不知道在这个空档期中该显示什么内容,所以需要我们指定。接下来就要使用到Suspense

Suspense

如果在 App 渲染完成后,包含 OtherComponent 的模块还没有被加载完成,我们可以使用加载指示器为此组件做
优雅降级。这里我们使用 Suspense 组件来解决。

import React, { Suspense, Component } from 'react';
 import './App.css';
 //使用React.lazy导入OtherComponent组件
const OtherComponent = React.lazy(() => import('./OtherComponent'));
 export default class App extends Component {
 state = {
 visible: false
 }
 render() {
 return (
 <div className="App">
 <button onClick={() => {
 this.setState({ visible: true })
 }}>
 加载OtherComponent组件
</button>
 <Suspense fallback={<div>Loading...</div>}>
 {
 this.state.visible ? <OtherComponent /> : null
 }</Suspense>
 </div>
 )
 }
 }

相关推荐

  1. React

    2024-03-17 09:46:01       22 阅读
  2. react组件

    2024-03-17 09:46:01       18 阅读
  3. ReactReact组件lazy和Suspense

    2024-03-17 09:46:01       9 阅读
  4. React和Vue实现路由

    2024-03-17 09:46:01       31 阅读
  5. React和Vue实现路由

    2024-03-17 09:46:01       26 阅读
  6. React和Vue实现路由

    2024-03-17 09:46:01       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 09:46:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 09:46:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 09:46:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 09:46:01       18 阅读

热门阅读

  1. awk命令——文本数据格式处理工具

    2024-03-17 09:46:01       23 阅读
  2. 门牌制作-蓝桥杯?-Lua 中文代码解题第3题

    2024-03-17 09:46:01       21 阅读
  3. 飞桨科学计算套件PaddleScience

    2024-03-17 09:46:01       19 阅读
  4. Redis列表:高效消息通信与实时数据处理的利器

    2024-03-17 09:46:01       20 阅读
  5. qt 使用有参数的信号和槽

    2024-03-17 09:46:01       20 阅读
  6. Git 命令大全

    2024-03-17 09:46:01       19 阅读
  7. 小程序的wxss和css区别?

    2024-03-17 09:46:01       22 阅读
  8. Jenkins: 配合docker来部署项目

    2024-03-17 09:46:01       21 阅读