1. 引入Echarts包
import * as echarts from 'echarts';
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 () => {
};
}, []);
3. 构建div元素
<div id={id} style={{ width: 341, height: 75 }}>div>
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,
series: [
{
type: 'pie',
minAngle: 60,
radius: ['70%', '86%'],
center: ['12%', '50%'],
avoidLabelOverlap: false,
label: {
normal: {
show: true,
position: 'center',
color: '#4c4a4a',
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,
}}
>
{}
{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 () => {
};
}, []);
return (
<div style={{ position: 'relative' }} className={styles['pie-container']}>
<div id={id} style={{ width: 341, height: 75 }}></div>
{}
<div
className={[styles['pie-content'], styles['grid-show-item2']].join(' ')}
>
{listDom}
</div>
</div>
);
};
![](https://1000bd.com/contentImg/2022/06/27/191644837.png)
- 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