npm装置echarts-for-react
npm install --save echarts-for-reactnpm install echarts --save
引入模块和组件
import React from 'react';import echarts from 'echarts/lib/echarts'import 'echarts/lib/chart/pie'; //折线图是line,饼图改为pie,柱形图改为barimport 'echarts/lib/component/tooltip';import 'echarts/lib/component/title';import 'echarts/lib/component/legend';
配置option参数
写在一个独自的文件config.js文件,而后module.exports导出
let colors = ['#E60012', '#EB6100', '#F39800', '#FFF100', '#8FC31F', '#22AC38', '#009944', '#009E96', '#0068B7', '#601986']module.exports = { color: colors, title: { text: '设施类型统计', left: 'left', top: '2%', textStyle: { color: '#fff' } }, tooltip: { trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' }, series: [ { name: '类型统计', type: 'pie',//饼图 radius: [30, 110], roseType: 'area', data: [],//数据前面再导入 //设置显示标签的款式 label: { position: 'outside', color: '#0DD5ED', // formatter: '{b} \n\n {d}%', formatter: function (data) { return data.name + ' \n\n ' + data.percent.toFixed(1) + '%' }, padding: [0, -30, 0, -30], }, //设置线条款式 labelLine: { length: 10, length2: 30, lineStyle: { width: 1 } }, } ]};
组件初始化
我应用的是class组件
import React from 'react';import echarts from 'echarts/lib/echarts'import 'echarts/lib/chart/pie'; //折线图是line,饼图改为pie,柱形图改为barimport 'echarts/lib/component/tooltip';import 'echarts/lib/component/title';import 'echarts/lib/component/legend';import config from './config.js'class PieDiv extends React.Component { /** * 初始化id id是随机生成的一串惟一的字符串 */ constructor(props) { super(props) let id = ('_' + Math.random()).replace('.', '_'); this.state = { pieId: 'pie' + id } } /** * 生成图表,次要做了一个判断,因为如果不去判断dom有没有生成, * 在前面如果定期去更新图表,每次生成一个dom节点会导致浏览器 * 占用的cpu和内存十分高,踩过坑。 * 这里的config就是引入的配置文件中的config,文件头部会有阐明 */ initPie(id) { let myChart = echarts.getInstanceByDom(document.getElementById(id)); if (myChart === undefined) { myChart = echarts.init(document.getElementById(id)); } myChart.setOption(config) } //在其余中央援用的时候,把值传入list中,就能够应用改选件, //因为接口中查问到的不肯定会间接渲染页面,所有采纳componentWillReceiveProps生命 //周期函数,在值发生变化的时候,从新传入值。 componentWillReceiveProps=(nextProps)=> { const {list:oldlist} = this.props const {list:newlist} = nextProps if(oldlist!=newlist){ config.series[0].data = newlist this.initPie(this.state.pieId); } } //应用组件的时候还须要传入一个height,因为echarts图表显示必须要有高度,没有高度无奈显示图表 render() { const {height} = this.props return ( <div id={this.state.pieId} style={{ height }}></div> ) }}export default PieDiv
最初
在其余中央引入,就能够应用这个饼图了
import PieDiv from '***'<PieDiv height={400} list={this.state.DataArr}/>
传入的list数据格式如下
data= [ { name: 'XXX', value: 1 , }, { name: 'XXX', value: 2 , }, ]