React 中的 Suspense and lazy 使用介绍

  • Suspense 作用
  • lazy 作用
  • Suspense 与 lazy 结合使用案例

Suspense 作用

Suspense 的中文意思是悬而不定,顾名思义指的是数据加载完成之前页面呈现的内容。
在 Suspense 内的任何子组件(数据)只要还在 pending 或者初始状态,则显示的是 fallback 的内容。等所有的数据加载完成才显示子组件,避免多次更新。

此功能与传统的数据渲染前用一个 loading 状态过度很像,只不过 React 提供了 Suspense 组件来更优雅地处理渲染前的显示问题。

lazy 作用

我们都知道使用 webpack 打包后会将所有的资源打包到一个入口文件中,这样可以减少请求的资源数量。

当然我们可以使用 mini-css-extract-plugin 插件将 CSS 单独分割出来。但是所有的项目打包到一个 js 文件难免造成体积过大加载缓慢的情况。

使用 React.lazy 可以将组件打包到单独的 chunk 文件中,并且实现按需加载。比如在加载首页时只加载首页所需要的资源文件,这样就可以提升加载速度。

React.lazy 是一个函数,需要动态调用 import()。它必须返回一个 Promise,该 Promise 需要 resolve 一个 defalut export 的 React 组件。

如果不使用 lazy,你是这样引入组件:

import App from './App';

使用 lazy 之后,就是这样引入组件:

const App = React.lazy(() => import('./App.js'));

通常 lazy 与 Suspense 组件配合使用,这样在懒加载过程中可以呈现友好的等待界面,如 loading 图等。

Suspense 与 lazy 结合使用案例

以下 Suspense 组件内提供三个子组件。
一个是 Promise 的异步组件;
一个是 需要更新的 state 数据;
一个是 lazy 懒加载的组件。
在三个组件全部加载完成前显示的是 fallback 的内容。
全部加载完成后才将组件内容显示出来。

index.js

import React,{Suspense,lazy} from 'react';
const LazyComp = lazy(()=>import('./lazy.js'));
let data = "";
let promise = "";
function requestData() {if(data){return data;}if(promise){ throw  promise}promise = new Promise((resolve)=>{setTimeout(()=>{data = "数据出来了";resolve();},2000)})throw promise
}
function SuspenseComp() {const data = requestData();return <p>{data}</p>
}
export default class  CommonTable extends React.Component{constructor(){super();this.state={title:"初始标题"}}componentDidMount(){this.setState({title:"渲染后的标题"})}render(){return<Suspense fallback="loading"><SuspenseComp/><div>{this.state.title}</div><LazyComp/></Suspense>}
}

lazy.js

import React from 'react';
export default ()=><p>lazy data</p>

初始时效果:


2s 后全部加载完成效果:

了解 React 之 Suspense 和 lazy相关推荐

  1. react 日历组件_anujs1.5.1支持React.Suspense与lazy

    React16是一个实验版本,除了测试它的新fiber架构外,还添加了大量新功能.其他React.Suspense与React.lazy就是重磅中的重磅. 随着前端的APP化,不断集成功能,页面越来越 ...

  2. React:Suspense的实现与探讨

    前言:本文带你实现一下createFetcher,loading,placeholder,等不及的同学请看仓库: 215566435/think-in-suspense Suspense的实现很诡异, ...

  3. react新特性实例详解(memo、lazy、suspense、hooks)

    1.memo 其实react.memo的实现很简单,就几行代码. export default function memo<Props>(type: React$ElementType,c ...

  4. React 16.x折腾记 - (7) 基于React+Antd封装聊天记录(用到React的memo,lazy, Suspense这些)

    前言 在重构的路上,总能写点什么东西出来 , 这组件并不复杂,放出来的总觉得有点用处 一方面当做笔记,一方面可以给有需要的人; 有兴趣的小伙伴可以瞅瞅. 效果图 实现的功能 渲染支持图片,文字,图文 ...

  5. 2018 react 大会_React Conf 2018的经验教训

    2018 react 大会 by Yangshun Tay 阳顺泰 React Conf 2018的经验教训 (Lessons Learned at React Conf 2018) I was fo ...

  6. ajax mysql项目 react_React16时代,该用什么姿势写 React ?

    React16 后的各功能点是多个版本陆陆续续迭代增加的,本篇文章的讲解是建立在 16.6.0 版本上 本篇文章主旨在介绍 React16 之后版本中新增或修改的地方,所以对于 React16 之前版 ...

  7. react antd confirm content list_react简单的项目架构搭建过程

    前言 react官方推荐的脚手架create-react-app因为想给用户的最大自由度所以并没有像vue的脚手架那样生成的项目架构那么齐全,用这个写写demo还行,但是真正用在项目上还是不太合适的. ...

  8. vue3新增Suspense组件

    在开始介绍 Vue 的 Suspense 组件之前,我们有必要先了解一下 React 的 Suspense 组件,因为他们的功能类似. React 16.6 新增了 组件,让你可以"等待&q ...

  9. react 显示当前时间_React 灵魂 23 问,你能答对几个?

    1.setState 是异步还是同步? 合成事件中是异步 钩子函数中的是异步 原生事件中是同步 setTimeout中是同步 相关链接: 你真的理解setState吗? 2.聊聊 react@16.4 ...

  10. React高频面试题总结 (附答案及原理代码)

    React高频面试题总结 (附答案及原理代码) 1.说说对React的理解?有哪些特性? 1.React是用于构建用户界面的JavaScript库,只提供了UI层面的解决方案,遵循组件设计模式.声明式 ...

最新文章

  1. 从电影死亡笔记看商业智能在治安领域的应用
  2. yum php56w_yum安装PHP/yum升级PHP
  3. Opengl-几何着色器(劫持顶点的家伙)
  4. C# chart控件基础使用
  5. 03-高级选择器,属性选择器,伪类选择器
  6. 支持常见数据库差异对照说明
  7. 找不到QtDir变量的解决办法, 同时不需要经过编译就可以使用qt 库
  8. [BUUCTF-pwn]——picoctf_2018_echo back
  9. 使用Picker的时候,让input输入框使用焦点,手机键盘不弹出
  10. 2012年全国最新Android开发工程师薪资水平调查分析
  11. python 利用递归求阶乘
  12. Thrift java.net.SocketException: Broken pipe问题分析定位
  13. HashMap中,比较key是否相等为什么要重写equal() 和hashCode()这两个方法?
  14. RabbitMQ 实现RPC
  15. 我从Python新手到大师的百天之路(内附学习资源)
  16. 马化腾的马氏建议:“小步快跑 快速迭代”
  17. 中产需要盒马,盒马想要下沉
  18. ROS机器人(一) -- 环境搭建
  19. DB2用户授权表查询权限
  20. mysql没有表空间,MySQL的表空间是什么

热门文章

  1. openGL学习笔记七: glad库及使用
  2. 在消防巡检设备中安科瑞多电量变送器的应用
  3. 你需要一个什么样的网站开发流程?
  4. IXI数据预处理 + Linux + freesurfer
  5. SAS硬盘与SATA硬盘有什么区别
  6. 如何写简历才能够突显自己的厉害之处?
  7. PDF文件怎么修改,PDF文件修改的方法
  8. android 播放资源mp4,Android播放assets文件里视频文件相关问题分析
  9. Linux系统时间校准
  10. ps中给图片加文字不显示解决办法