• NodeJS + React + Webpack + Echarts


    最近画了个简单的前端图,使用百度的echarts,基于原来项目的NodeJS+React+Webpack框架。在此记录一下:

    1.  在react里封装echarts组件,并调用后端API。

    (参考的是一个只有样本数据,无数据封装的例子,对于没有接触前端却要对接这个图的我,简直是折磨得不行)。

    import React from 'react';
    import { tablelineagenodes, tablelineagelinks } from 'actions';
    import { connect } from 'react-redux';
    import { push } from 'react-router-redux';
    import { Button } from 'antd';
    
    // 导入echarts
    var echarts = require('echarts/lib/echarts') // 必须
    require('echarts/lib/chart/sankey') // 图表类型
    require('echarts/lib/component/tooltip') // echart插件
    require('echarts/lib/component/title') // 标题插件
    require('echarts/lib/component/grid') // echart插件
    
    // 后端封装接口
    @connect(
    	state => ({
    		nodes: state.tablelineagenodes.list,
    		links: state.tablelineagelinks.list
    	}), {
    		pushRouter: push,
    		queryTablelineagenodes: tablelineagenodes.queryTablelineagenodes,
    		queryTablelineagelinks: tablelineagelinks.queryTablelineagelinks
    	}
    )
    
    class Lineage extends React.Component {
    	state = {context: '', isRender: false};
    
    	constructor(props) {
    		super(props)
    		this.setSankeyOption = this.setSankeyOption.bind(this)
    		this.initSankey = this.initSankey.bind(this)
    	}
    
    	routeBuildRecord = _url => {
    		this.props.pushRouter(_url);
    	}
    
    	initSankey() {
    		this.props.queryTablelineagenodes()
    		this.props.queryTablelineagelinks()
    	}
    
    	componentDidMount() { //  取数
    		this.initSankey()
    	}
    
    	componentDidUpdate() { // 画图
    		const {nodes, links} = this.props;
    		console.log(nodes)
    		console.log(links)
    
    		if (nodes.length !== 0 && links.length !== 0) {
    			// 初始化echart
    			let myChart = echarts.init(document.getElementById("app"))
    			// 我们要定义一个setSankeyOption函数将data传入option里面
    			let options = this.setSankeyOption(nodes, links)
    			// 设置options
    			myChart.setOption(options)
    		}
    	}
    
    	render() {
    		return (
    			<div className="sankey-react">
    				<div className="condition">
    					<Button type="primary" onClick={() => this.routeBuildRecord("/datacenter/datalineage")} >查询的实体血缘为空,重新修改查询吧</Button>
    				</div>
    				<div id="app" style={{ "100%", height: "200px"}}></div>
    			</div>
    		)
    	}
    
        // 一个基本的echarts图表配置函数
    	setSankeyOption(nodes, links) {
    		return {
    			title: {
    				text: '实体血缘图'
    			},
    			tooltip: {
    				trigger: 'item',
    				triggerOn: 'mousemove'
    			},
    			animation: false,
    			grid: {
    				left: '5%',
    				right: '0',
    				top: '200px',
    				bottom: '5%',
    				containLabel: true
    			},
    			series: [
    				{
    					type: 'sankey',
    					layout: 'none',
    					radius: '10%',
    					center: ['50%', '50%'],
    					data: nodes,
    					links: links,
    					itemStyle: {
    						normal: {
    							borderWidth: 1,
    							borderColor: '#aaa'
    						}
    					},
    					lineStyle: {
    						normal: {
    							color: 'source',
    							curveness: 0.5
    						}
    					}
    				}
    			]
    		}
    	}
    }
    
    export default Lineage;
    

    2.   结果展示:

     

  • 相关阅读:
    sql 连表
    Laravel 数据验证
    zend studio 破解、汉化和字体颜色及快捷键相关设置
    关于storm的一些知识点
    storm架构原理及集群部署
    storm使用过程中出现的错误:Caused by: java.net.UnknownHostException: storm: 未知的名称或服务
    ElasticSearch基础知识
    ElasticSearch java客户端更新时出现的错误:NoNodeAvailableException[None of the configured nodes are available
    sublime text3 注册码 (Version 3.0)
    使用HTMLTestRunner生产报告
  • 原文地址:https://www.cnblogs.com/skyEva/p/6340635.html
Copyright © 2020-2023  润新知