zoukankan      html  css  js  c++  java
  • 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.   结果展示:

     

  • 相关阅读:
    jmeter分布式配置
    APP自动化测试获取包名的两种方法
    Monkey自动化测试命令
    jmeter之http请求用csv读取中文乱码
    jmeter断言之响应code:200
    使用 form 和 iframe 实现图片上传回显
    sublime3 破解
    在cmd下面执行.py文件时提示ModuleNotFoundError 但是 IDE 不报错
    windows 开启 nginx 监听80 端口 以及 禁用 http 服务后,无法重启 HTTP 服务,提示 系统错误 123,文件目录、卷标出错
    python打包exe
  • 原文地址:https://www.cnblogs.com/skyEva/p/6340635.html
Copyright © 2011-2022 走看看