• React项目中使用Echarts


    1. 引入Echarts包

    import * as echarts from 'echarts';
    
    • 1

    2. 给元素setOption

      const chartIns = useRef<any>(null);
      useEffect(() => {
        const element = document.getElementById(id) as HTMLElement;
        console.log(element);
        chartIns.current?.dispose();
        setTimeout(() => {
          chartIns.current = echarts.init(element);
          if (chartIns.current) {
            chartIns.current.setOption(option, true);
          }
        }, 20);
        return () => {
          // echarts.dispose(element);
        };
      }, []);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3. 构建div元素

    <div id={id} style={{ width: 341, height: 75 }}>div>
    
    • 1

    4. 代码

    import React, { useEffect, useMemo, useRef } from 'react';
    import * as echarts from 'echarts';
    import styles from '../index.module.less';
    import { numFormat } from '@/utils/utils';
    
    export default (props: any) => {
      const colorArr = ['#FAC758', '#91CC74', '#5470C6', '#FA8500'];
      const { id, bizType, bizTypeName, dataList } = props;
      dataList.forEach((o, index) => {
        o.color = colorArr[index];
        o.value = o.qty;
        o.name = o.subBizTypeName;
      });
      const option = {
        tooltip: {
          trigger: 'item',
        },
        color: colorArr,
        // legend: {
        //   icon: 'circle',
        //   // top: '20%',
        //   left: '20%',
        //   width: 300,
        //   itemGap: 20,
        //   formatter(param) {
        //     const item = dataList.find(o => o.subBizTypeName === param)
        //     return '{a|' + param + '  ' + item.qty + '}';
        //   },
        //   textStyle: {
        //     rich: {
        //       a: {
        //         width: 150,
        //         display: 'inline-block',
        //       }
        //     }
        //   }
        // },
        series: [
          {
            type: 'pie',
            minAngle: 60,
            radius: ['70%', '86%'],
            center: ['12%', '50%'],
            avoidLabelOverlap: false,
            label: {
              normal: {
                show: true,
                position: 'center',
                color: '#4c4a4a',
                // formatter: `{active|${bizTypeName}`,
                formatter: (param) => {
                  console.log('aaaa', param);
                  return `${bizTypeName}`;
                },
                rich: {
                  desc: {
                    color: 'var(--gray-gray-10, #262626)',
                    fontFamily: 'Microsoft YaHei',
                    fontSize: 10,
                    fontStyle: 'normal',
                    fontWeight: 400,
                    lineHeight: 'normal',
                  },
                },
              },
            },
            data: dataList,
          },
        ],
      };
    
      const listDom = useMemo(() => {
        return dataList.map((o: any) => (
          <div
            style={{ display: 'flex', alignItems: 'center', gap: 4 }}
            className={styles['pie-desc']}
          >
            <div
              style={{
                width: 6,
                height: 6,
                borderRadius: '50%',
                background: o.color,
              }}
            />
            <span style={{ display: 'inline-block', marginRight: 10 }}>
              {o.subBizTypeName}
            </span>
            <span
              className={styles['pie-num']}
              style={{
                color: o.color,
              }}
            >
              {/*{o.qty}*/}
              {numFormat(o.qty)}
            </span>
          </div>
        ));
      }, [dataList]);
    
      const chartIns = useRef<any>(null);
      useEffect(() => {
        const element = document.getElementById(id) as HTMLElement;
        console.log(element);
        chartIns.current?.dispose();
        setTimeout(() => {
          chartIns.current = echarts.init(element);
          if (chartIns.current) {
            chartIns.current.setOption(option, true);
          }
        }, 20);
        return () => {
          // echarts.dispose(element);
        };
      }, []);
    
      return (
        <div style={{ position: 'relative' }} className={styles['pie-container']}>
          <div id={id} style={{ width: 341, height: 75 }}></div>
          {/* 自己写一段类似于legend的html,然后绝对定位到echarts图表上*/}
          <div
            className={[styles['pie-content'], styles['grid-show-item2']].join(' ')}
          >
            {listDom}
          </div>
        </div>
      );
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
  • 相关阅读:
    大数据常见面试题 Hadoop篇(2)
    下一个创业风口你认为是什么?
    论文阅读_医疗知识图谱_GraphCare
    SpreadJS 16.1.1 + GcExcel 6.1.0 Crack
    Invalid prop: custom validator check failed for prop “percentage
    通过工具分析MongoDB性能问题
    【运维篇】5.6 Redis server 主从复制配置
    jar包和war包的区别
    python调用c++版本dll03-简单的函数调用
    如何用BigDecimal定义数字
  • 原文地址:https://blog.csdn.net/m0_56542349/article/details/133296788