### react16.5.0实现echarts4模块化加载
**我们真的需要react-echarts插件吗?**
## NO
**注意:该项目仅作为源码学习使用,不能采取npm install --save react-echarts-modules的方式导入你的项目,因为这不是一个插件!!**
**在这里,我使用echarts提供的模块化加载方式,实现了几个react-echarts图表组件**
**你可以打开控制台,观察每个图表组件的加载情况。**
#### 插件版本号
```json
"echarts": "4.1.0",
"react": "16.5.0",
"react-dom": "16.5.0"
```
#### 实现了哪些图表组件
1、饼图
2、柱状图
3、折线图
4、散点图
5、地图
6、雷达图
7、k线图
#### echarts体积太大,使用模块化加载
以柱状图为例子,我们根据需要渲染的插件采取模块导入,不渲染的组件不导入,最大程度减小js。
```javascript
import echarts from 'echarts/lib/echarts' //必须
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/grid'
import 'echarts/lib/chart/bar'
```
#### 组件化开发的福音,react组件模块化加载
demo中采用单个echarts组件异步打包加载的模式,因为echarts组件普遍偏大,即使压缩也效果不明显,所以异步加载是最好的方式。
```javascript
import { pieOption, barOption, lineOption, scatterOption, mapOption, radarOption, candlestickOption } from './optionConfig/options'
const PieReact = asyncComponent(() => import(/* webpackChunkName: "Pie" */'./EchartsDemo/PieReact')) //饼图组件
const BarReact = asyncComponent(() => import(/* webpackChunkName: "Bar" */'./EchartsDemo/BarReact')) //柱状图组件
const LineReact = asyncComponent(() => import(/* webpackChunkName: "Line" */'./EchartsDemo/LineReact')) //折线图组件
const ScatterReact = asyncComponent(() => import(/* webpackChunkName: "Scatter" */'./EchartsDemo/ScatterReact')) //散点图组件
const MapReact = asyncComponent(() => import(/* webpackChunkName: "Map" */'./EchartsDemo/MapReact')) //地图组件
const RadarReact = asyncComponent(() => import(/* webpackChunkName: "Radar" */'./EchartsDemo/RadarReact')) //雷达图组件
const CandlestickReact = asyncComponent(() => import(/* webpackChunkName: "Candlestick" */'./EchartsDemo/CandlestickReact')) //k线图组件
```
### 启动项目
```npm
npm install
```
```npm
npm start
```
### 打包项目
```npm
npm run build
```
### 实现方案介绍
1、每个图表单独封装成一个组件,通过参数传递数据,你会发现,图表内部代码几乎完全一样,只有import的类型不同。
2、异步加载是提高图表加载性能的最佳方式,不管是服务端还是客户端渲染。
3、在这些demo中,我认为对你来说最有价值的是react组件异步加载模式,很多人异步加载组件是通过拆分路由的方式,而非路由组件的异步加载,并不多人去尝试。但我想告诉你的是,
非路由组件的异步加载会将你的庞大的父组件拆分的更细,体积更小,加载的更加流畅。
4、有时候,我会看到有些人把echarts打包到公共js文件里面,如果你的首屏不需要用到它,完全没有必要这样做。
### 附echarts各个模块导出路径
```javascript
/**
* 导出echarts主模块
*/
module.exports = require('./lib/echarts');
// 各子模块路径
require('./lib/chart/line');
require('./lib/chart/bar');
require('./lib/chart/pie');
require('./lib/chart/scatter');
require('./lib/chart/radar');
require('./lib/chart/map');
require('./lib/chart/treemap');
require('./lib/chart/graph');
require('./lib/chart/gauge');
require('./lib/chart/funnel');
require('./lib/chart/parallel');
require('./lib/chart/sankey');
require('./lib/chart/boxplot');
require('./lib/chart/candlestick');
require('./lib/chart/effectScatter');
require('./lib/chart/lines');
require('./lib/chart/heatmap');
require('./lib/chart/pictorialBar');
require('./lib/chart/themeRiver');
require('./lib/chart/custom');
require('./lib/component/graphic');
require('./lib/component/grid');
require('./lib/component/legend');
require('./lib/component/tooltip');
require('./lib/component/axisPointer');
require('./lib/component/polar');
require('./lib/component/geo');
require('./lib/component/parallel');
require('./lib/component/singleAxis');
require('./lib/component/brush');
require('./lib/component/calendar');
require('./lib/component/title');
require('./lib/component/dataZoom');
require('./lib/component/visualMap');
require('./lib/component/markPoint');
require('./lib/component/markLine');
require('./lib/component/markArea');
require('./lib/component/timeline');
require('./lib/component/toolbox');
require('zrender/lib/vml/vml');
```
JJJ69
- 粉丝: 6366
- 资源: 5917
最新资源
- 负荷需求响应模型matlab 通过分时电价方式下的负荷需求响应模型得到负荷响应前后变化情况,可以看到明显呈现削峰填谷的作用
- SXU-python实验报告及笔记
- Halcon安全环检测例程资源包
- 六轴EtherCAT总线伺服涂布收卷机程序,采用六个伺服+变频器+编码器,动态测量频率,计算转速,再算频率,用变频器同步伺服电机速度,进行通讯控制,具备一定参考价值
- 社会事件检测任务数据集 14个SocialED python库相关的数据集
- MMCM Dynamic Reconfig Source
- 基于HSV颜色的保险丝分类的完整Halcon例程代码和示例图像文件
- 基于springboot的冬奥会科普平台源码(java毕业设计完整源码+LW).zip
- 三菱R系列PLC案例程序 三菱R系列ST、RD77MS定位以及三菱触摸屏配方功能,此案例还提供两个触摸屏实现异地操作,使操作更加方便快捷 此案例还通过CClink远程连接远程IO站以及机器人,将机器
- 高噪声环境下形状匹配的完整Halcon例程代码、示例图像以及相关配套文件
- SXU-大数据开源框架实验报告
- SocialED:一个社会事件检测任务的python库
- a6efce1b9d16fdfae3915991f36fde5995ee7b39.jpeg
- 基于springboot的社区医院管理服务系统源码(java毕业设计完整源码+LW).zip
- 台达DVP PLC与3台西门子V20变频器通讯程序 台达PLC与3台西门子变频器通讯,可靠稳定,同时解决西门子变频器断电重启后,自准备工作,无需人为准备 器件:台达DVP 14es PLC,昆仑通态
- 基于形状匹配与OCR的多图像处理Halcon例程代码及示例图像文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈