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 (
) }