美文网首页
react中使用echarts初尝试

react中使用echarts初尝试

作者: Tangpriest | 来源:发表于2017-06-01 22:41 被阅读0次

    Echarts是百度出的一个关于图表的库,在比较了很多图表库后来决定了要用Echarts,一方面文档比较全,另外一方面我觉得和react的思想也比较接近,这篇文章可以基于上一篇关于webpack2 + react 的文章上继续尝试。

    这里是初步的尝试,我会定期继续更新自己的简书

    想到要在react中使用Echarts,相信很多人会和我一样,去github上搜索关键字react echarts ,找一找star数比较多的,去尝试一下,我本来也是想通过这种方式,后来发现自己完全可以不借助第三方的包来实现,首先可以去官网,针对webpack,百度给出了自己的文档,这里面有官方说明

    http://echarts.baidu.com/tutorial.html
    
    首先通过npm安装Echarts
    npm install echarts --save-dev
    
    新建一个chart.jsx文件

    下面写我们的这个图表类,具体说明我会尽量在注释里面写清楚,第一步引入我们需要引入的内容

    import React, { Component } from 'react'
    
    /**
     * 说明:第一个import echarts是必须的
     * 第二个是引入的具体的一个图表类型 (可选)
     * 第三个是表的title(可选)
     */
    import echarts from 'echarts/lib/echarts' 
    import 'echarts/lib/chart/pie'
    import 'echarts/lib/component/title'
    
    新建一个config.js放这个图表的配置

    因为不希望自己的组件的jsx文件太过冗长,遵循CommonJS规范,单独建立config存放自己的配置文件,所以你的配置文件可能看起来是这个样子,这个配置项完全参照百度给的Demo,别忘了在你的文件头部加载进去

    module.exports = {
        backgroundColor: '#2c343c',
        title: {
            text: 'Customized Pie',
            left: 'center',
            top: 20,
            textStyle: {
                color: '#ccc'
            }
        },
    
        tooltip : {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
    
        visualMap: {
            show: false,
            min: 80,
            max: 600,
            inRange: {
                colorLightness: [0, 1]
            }
        },
        series : [
            {
                name:'访问来源',
                type:'pie',
                radius : '55%',
                center: ['50%', '50%'],
                data:[
                    {value:335, name:'直接访问'},
                    {value:310, name:'邮件营销'},
                    {value:274, name:'联盟广告'},
                    {value:235, name:'视频广告'},
                    {value:400, name:'搜索引擎'}
                ].sort(function (a, b) { return a.value - b.value; }),
                roseType: 'radius',
                label: {
                    normal: {
                        textStyle: {
                            color: 'rgba(255, 255, 255, 0.3)'
                        }
                    }
                },
                labelLine: {
                    normal: {
                        lineStyle: {
                            color: 'rgba(255, 255, 255, 0.3)'
                        },
                        smooth: 0.2,
                        length: 10,
                        length2: 20
                    }
                },
                itemStyle: {
                    normal: {
                        color: '#c23531',
                        shadowBlur: 200,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                },
    
                animationType: 'scale',
                animationEasing: 'elasticOut',
                animationDelay: function (idx) {
                    return Math.random() * 200;
                }
            }
        ]
    };
    
    下面开始写component

    这里我把完成的代码贴出来啦,写了注释,这是我的第一次尝试,图表绘制出来了并且刷新数据也是正常的

    import React, { Component } from 'react'
    import config from './chart.config.js'
    
    /**
     * 说明:第一个import echarts是必须的
     * 第二个是引入的具体的一个图表类型 (可选)
     * 第三个是表的title(可选)
     */
    import echarts from 'echarts/lib/echarts' 
    import 'echarts/lib/chart/pie'
    import 'echarts/lib/component/title'
    
    
    
    export class PieReact 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)
        }
        componentDidMount() {
            /**
             * 在这里去调用生成图表的方法是因为,在组件加载后生成
             * dom节点,这个时候canvas才能根据id去绘制图表
             * 在这里去写了一个setTimeout修改了其中的一些数据,来
             * 测试图表的刷新,是否刷新了,后期大家可能是定期去某
             * 接口中获取数据,方法同理
             */                
            this.initPie(this.state.pieId);
            setTimeout(()=>{
                config.series[0].data = [
                    {value:335, name:'中国'},
                    {value:310, name:'美国'},
                    {value:274, name:'英国'},
                    {value:235, name:'俄罗斯'},
                    {value:400, name:'法国'}
                ].sort(function (a, b) { return a.value - b.value; })
                this.initPie(this.state.pieId);
            },1000*5)
        }
        componentDidUpdate() {
            console.log('componentDidUpdate!')
            this.initPie()
        }
        render() {
            return (
                <div>
                    <div id={this.state.pieId} style={{width: "500px", height: "500px"}}></div>
                </div>
            )
        }
    }
    export default PieReact
    
    代码可以去拉一下github上的代码,但是我还在尝试中,所以能看个大概,但是可以继续开发,实现原理我已经写的很详细了
    https://github.com/Tangpriest/LearnReactEchart
    
    Contact QQ 609280645 huang93223@126.com

    相关文章

      网友评论

          本文标题:react中使用echarts初尝试

          本文链接:https://www.haomeiwen.com/subject/zuqyfxtx.html