在React 组件中使用Echarts的示例代码


Posted in Javascript onNovember 08, 2017

在完成一个需求的时候碰到一个场景需要使用柱状图。涉及到可视化,第一反应当然是Echarts了。平时用js加载Echarts组件很方便,但是在React中就要费下神了。各种连蒙带猜实现了。edmo里的

这里我们要在自己搭建的react项目中使用ECharts,我们可以在ECharts官网上看到有一种方式是在 webpack 中使用 ECharts,我们需要的就是这种方法。

我们在使用ECharts之前要先安装ECharts,在以往的开发模式中,我们很多使用就是把官网中的ECharts的核心js文件导入到我们的html或者是jsp等文件里面,但是在react项目中,我们可以直接使用node.js的npm命令安装:

npm install echarts --save

Echarts的例子就是Echarts文档上介绍的最简单的应用。

render:function() {
    
  var info = 1;

    return (  
      <div className="mt15 xui-financialAnalyse-page">   
        <div className="xui-general">
          <Chart data={info} data-info={info} />
        </div>
      </div>
    )
  }

这是调用Echarts组件的地方,给里面传了2个属性(data-开头是H5定义的规范)

var Chart = React.createClass({
  getInitialState: function() {
    this.token = Store.addListener(this.onChangeData);
    return {}
  },

  componentWillMount: function() {
    var info = this.props.data; 
    //HTML5规定自定义属性要以data-开头,这样的可以如下取
    console.log(this.props['data-info']) 
    Action.getInfo(info);
  },


   componentDidUpdate: function() {

 this.showChart(this.state.data)
   },

   onChangeData: function() {
    var data = Store.getData();
    this.setState({
      data: data['info']['data'] //后台返回的数据
    });
  },

   showChart: function(dataSet){
    var myChart = echarts.init(document.getElementById('main'));

    var option = {
        title: {
        text: 'ECharts 入门示例'
      },
      color: ['#3398DB'],
      tooltip : {
        trigger: 'axis',
        axisPointer : {    
          type : 'shadow' 
        }
      },
      grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
      },
      xAxis : [
        {
          type : 'category',
          data : ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
          axisTick: {
            alignWithLabel: true
          }
        }
      ],
      yAxis : [
        {
          type : 'value'
        }
      ],
      series : [
        {
          name:'你好',
          type:'bar',
          barWidth: '60%',
          data: dataSet
        }
      ]
    };

    myChart.setOption(option);
   },

   render: function() {
    return (
       <div id="main" style={{width: 500, height:500}}></div>
    )
  }
});

上面是完整的demo Echarts组件的代码,主要是利用了React根据不同状态(3种状态)提供的处理函数(一共有5种)。

1、componentWillMount:在插入真实DOM之前发起Action,向后端请求数据。

2、onChangeStore:在数据变更的时候更新数据,并在getInitialState中加入监听Store中数据变化的监听器。

3、componentDidUpdate:在数据被重新渲染之后,触发showChart()方法绘制canvas。

4、showChart:配置Echarts,具体配置信息可以参考Echarts文档

5、如果组件生命周期结束,那么要加上如下代码:

componentWillUnmount: function() {
    this.token.remove();
  },

否则会报错: Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op. Please check the code for the undefined component.

最后附上效果图:

 在React 组件中使用Echarts的示例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery选择器特辑 详细小结
May 14 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
Apr 22 Javascript
require.js深入了解 require.js特性介绍
Sep 04 Javascript
javascript实现全角半角检测的方法
Jul 23 Javascript
Angular.js回顾ng-app和ng-model使用技巧
Apr 26 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
Aug 05 Javascript
vue如何使用 Slot 分发内容实例详解
Sep 05 Javascript
vue 纯js监听滚动条到底部的实例讲解
Sep 03 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
Aug 16 Javascript
vue引用外部JS的两种种方法
Jan 28 Javascript
JS实现简易计算器
Feb 14 Javascript
Vue使用轮询定时发送请求代码
Aug 10 Javascript
浅谈mint-ui loadmore组件注意的问题
Nov 08 #Javascript
es6在react中的应用代码解析
Nov 08 #Javascript
mac中利用NVM管理不同node版本的方法详解
Nov 08 #Javascript
浅谈vue-router2路由参数注意的问题
Nov 08 #Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
Nov 08 #jQuery
javaScript之split与join的区别(详解)
Nov 08 #Javascript
AngularJs 终极购物车(实例讲解)
Nov 08 #Javascript
You might like
php连接oracle数据库的核心步骤
2016/05/26 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
csdn 批量接受好友邀请
2009/02/19 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
angular分页指令操作
2017/01/09 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python线性方程组求解运算示例
2018/01/17 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
华为慧通笔试题
2016/04/22 面试题
技术总监的工作职责
2013/11/13 职场文书
大学运动会入场词
2014/02/22 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript
Spring整合Mybatis的全过程
2021/06/28 Java/Android
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
java设计模式--原型模式详解
2021/07/21 Java/Android