123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import React, { useRef, useEffect } from 'react';
-
- // 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
- import * as echarts from 'echarts/core';
- // 引入图表,图表后缀都为 Chart
- import {
- BarChart,
- PieChart,
- LineChart,
- GaugeChart,
- RadarChart,
- PictorialBarChart,
- } from 'echarts/charts';
- // 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
- import {
- TitleComponent,
- TooltipComponent,
- ToolboxComponent,
- GridComponent,
- DatasetComponent,
- LegendComponent,
- DataZoomComponent,
- TransformComponent,
- VisualMapComponent,
- } from 'echarts/components';
- // 标签自动布局,全局过渡动画等特性
- import { LabelLayout, UniversalTransition } from 'echarts/features';
- // 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
- import { CanvasRenderer } from 'echarts/renderers';
-
- // 注册必须的组件
- echarts.use([
- TitleComponent,
- TooltipComponent,
- ToolboxComponent,
- GridComponent,
- DatasetComponent,
- LegendComponent,
- DataZoomComponent,
- TransformComponent,
- VisualMapComponent,
- BarChart,
- PieChart,
- LineChart,
- GaugeChart,
- RadarChart,
- PictorialBarChart,
- LabelLayout,
- UniversalTransition,
- CanvasRenderer
- ]);
-
- export default (props) => {
- const { className, style, option } = props;
-
- const domRef = useRef();
- const chartRef = useRef();
-
- useEffect(() => {
- if (!chartRef.current) {
- chartRef.current = echarts.init(domRef.current);
- }
-
- const resize = () => {
- const t = setTimeout(() => {
- clearTimeout(t);
- chartRef.current.resize();
- }, 100);
- };
-
- chartRef.current.setOption(option);
- resize();
-
- window.addEventListener('resize', resize);
- return () => window.removeEventListener('resize', resize);
- }, [option]);
-
- return (
- <div className={className} style={style} ref={domRef}></div>
- )
- }
|