index.jsx 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React, { useEffect, useRef } from 'react';
  2. import classNames from 'classnames';
  3. // 按需导入模块
  4. // 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
  5. import * as echarts from 'echarts/core';
  6. // 引入图表,图表后缀都为 Chart
  7. import { LineChart } from 'echarts/charts';
  8. // 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
  9. import {
  10. TitleComponent,
  11. TooltipComponent,
  12. GridComponent,
  13. DatasetComponent,
  14. TransformComponent,
  15. } from 'echarts/components';
  16. // 标签自动布局,全局过渡动画等特性
  17. import { LabelLayout, UniversalTransition } from 'echarts/features';
  18. // 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
  19. import { CanvasRenderer } from 'echarts/renderers';
  20. // 注册必须的组件
  21. echarts.use([
  22. TitleComponent,
  23. TooltipComponent,
  24. GridComponent,
  25. DatasetComponent,
  26. TransformComponent,
  27. LineChart,
  28. LabelLayout,
  29. UniversalTransition,
  30. CanvasRenderer,
  31. ]);
  32. import Styles from './style.less';
  33. export default (props) => {
  34. const domRef = useRef();
  35. const echartsRef = useRef();
  36. useEffect(() => {
  37. echartsRef.current = echarts.init(domRef.current);
  38. echartsRef.current.setOption(props.option);
  39. }, []);
  40. useEffect(() => {
  41. if (echartsRef.current) {
  42. echartsRef.current.setOption(props.option);
  43. }
  44. }, [props.option]);
  45. useEffect(() => {
  46. if (echartsRef.current) {
  47. if (props.loading) {
  48. echartsRef.current.showLoading();
  49. } else {
  50. echartsRef.current.hideLoading();
  51. }
  52. }
  53. }, [props.loading]);
  54. const classList = classNames(Styles.echarts, props.className);
  55. return <div className={classList} ref={domRef} />;
  56. };