在Ant Design Pro(React)中使用ECharts
使用Ant Design Pro解决方案可以快速搭建前端框架,而ECharts是前端最流行,功能最强大的前端图表库。
下面将讲解下如何在Ant Design Pro使用ECharts。
Ant Design Pro本身是通过Webpack进行打包的,而ECharts本身也提供了Webpack的安装方式,因此我们仅需要通过npm命令进行安装即可:
npm install echarts --save
如果没有报错,说明ECharts正常安装完毕。
下面分两种情况进行讲解:静态显示及数据流通应用
(1)静态显示
(a) 首先在/common/menu.js文件添加你的展示页及路径
比如:
{ name: '测试图表',
path: 'testechart',
// hideInBreadcrumb: true,
// hideInMenu: true,
},
我们是想在dashboard下面新增一个页面,如下:
(b) 然后在/common/router.js文件中添加以下内容,即你需要用到的models文件及业务实现代码路径
'/dashboard/testechart': { component: dynamicWrapper(app, ['monitor'], () => import('../routes/Dashboard/testEchart')),
},
(c) 然后在/routes/Dashboard/路径下添加你的业务实现逻辑代码testEchart.js,需要注意的是:名字可以更改,但是需要与上述保持一致,testEchart.js代码如下:
import React, { Component } from 'react';// 引入 ECharts 主模块
import echarts from 'echarts/lib/echarts';
// 引入柱状图
import 'echarts/lib/chart/bar';
// 引入提示框和标题组件
import 'echarts/lib/component/tooltip';
import 'echarts/lib/component/title';
class EchartsTest extends Component {
componentDidMount() {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 绘制图表
myChart.setOption({
title : {
text: '未来一周气温变化',
subtext: '纯属虚构'
},
tooltip : {
trigger: 'axis'
},
legend: {
data:['最高气温','最低气温']
},
toolbox: {
show : true,
feature : {
mark : {show: true},
dataView : {show: true, readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore : {show: true},
saveAsImage : {show: true}
}
},
calculable : true,
xAxis : [
{
type : 'category',
boundaryGap : false,
data : ['周一','周二','周三','周四','周五','周六','周日']
}
],
yAxis : [
{
type : 'value',
axisLabel : {
formatter: '{value} °C'
}
}
],
series : [
{
name:'最高气温',
type:'line',
data:[11, 11, 15, 13, 12, 13, 10],
markPoint : {
data : [
{type : 'max', name: '最大值'},
{type : 'min', name: '最小值'}
]
},
markLine : {
data : [
{type : 'average', name: '平均值'}
]
}
},
{
name:'最低气温',
type:'line',
data:[1, -2, 2, 5, 3, 2, 0],
markPoint : {
data : [
{name : '周最低', value : -2, xAxis: 1, yAxis: -1.5}
]
},
markLine : {
data : [
{type : 'average', name : '平均值'}
]
}
}
]
});
}
render() {
return (
<div id="main" style={{width: '80%',height:400}}></div>
);
}
}
export default EchartsTest;
效果如下:
一个在Ant Design Pro解决方案中使用ECharts的静态展示示例就完成了,然而实际应用中很少说数据是固定不变的,数据往往是通过调用后端接口来获得的,然后再通过前端渲染出来,示例如下文所示。
(2)数据流通应用
接下来,我们来完整模拟一个真实开发场景并实现这种数据流通的功能。
注:我们不搭建后台Server服务,而是使用Ant Design Pro解决方案提供的Mock数据功能来进行数据模拟。
补充:
.roadhogrc.mock.js:功能是提供mock数据的功能,模拟后台服务
src/services/api.js:功能是定义请求函数,在该文件中,定义真实需要请求的后端url地址和参数
src/models/*.js:models文件夹下的文件中整个Ant Design Pro解决方案中数据的存储和请求管理中心
src/routes/*.js:routes文件夹下的文件存放的是真实页面组件,在该组建中,我们一方面触发models下的请求动作,另一方面会读取models中存储的数据
下面我们将依次来实现这几个文件:
(a)在.roadhogrc.mock.js文件中,我们模拟后台来提供数据,即在proxy字典中,添加如下内容:
'POST /mock_test_data': (req, res) => { res.send({
status: 'ok',
code: 200,
x_data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
});
},
意思就是当我们使用POST方式访问/mock_test_data地址时,会返回如下信息:
{ status: 'ok',
code: 200,
x_data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
}
(2)接下来,我们修改/src/service/api.js文件,该文件中,我们需要定义函数如下:
export async function queryTestData() { // 查询测试数据
return request('/mock_test_data', {
method: 'POST',
body: {},
});
}
(3)然后我们得在/src/models/目录下添加我们的models文件,命名为:test.js
内容如下:
// 从services/api文件中引入queryTestData函数import {
queryTestData,
} from '../services/api';
export default {
namespace: 'test',
// 数据存储中心,初始化为空
state: {
x_data: [],
series: [],
},
effects: {
// 定义动作,调用该动作时发起请求
*fetchTestData(body, { call, put }) {
const response = yield call(queryTestData);
// 接收到请求的返回值后,调用saveTestData进行存储
yield put({
type: 'saveTestData',
x_data: response.x_data,
series: response.series,
});
}
},
reducers: {
// 将请求的响应值存储至数据存储中心中。
saveTestData(state, action) {
return {
...state,
x_data: action.x_data,
series: action.series
};
}
},
};
(4)在/common/menu.js文件添加你的展示页及路径
{ name: '测试图表2',
path: 'testechart2',
// hideInBreadcrumb: true,
// hideInMenu: true,
},
(5)然后在/common/router.js文件中添加以下内容,即你需要用到的models文件及业务实现代码路径
'/dashboard/testechart2': { component: dynamicWrapper(app, ['monitor', 'test'], () => import('../routes/Dashboard/testEchartDemo')),
},
(6)最后我们需要在/routes/Dashboard/路径下编写我们真实的页面组件代码了,文件名为:testEchartDemo.js,内容如下:
注:所有涉及到的文件名可以自定义,但必须保证一致,比如/common/router.js文件中import('../routes/Dashboard/testEchartDemo')与/routes/Dashboard/testEchartDemo.js文件对应
import React, { Component } from 'react';import { connect } from 'dva';
// 引入 ECharts 主模块
import echarts from 'echarts/lib/echarts';
// 引入柱状图
import 'echarts/lib/chart/bar';
// 引入提示框和标题组件
import 'echarts/lib/component/tooltip';
import 'echarts/lib/component/title';
@connect(({ setting, test, loading }) => ({
setting, test
}))
//class EchartsTest extends Component {
export default class EchartsTest extends React.Component {
constructor(props) {
super(props);
// 设置state
this.state = {
};
}
componentDidMount() {
this.props.dispatch({
type: 'test/fetchTestData',
//body: {}
body:{}
});
}
componentWillReceiveProps(nextProps) {
var myChart = echarts.init(document.getElementById('main'));
// 绘制图表
myChart.setOption({
title: { text: 'ECharts 入门示例' },
tooltip: {},
xAxis: {
data: nextProps.test.x_data
},
yAxis: {},
series: nextProps.test.series
});
}
render() {
return (
<div id="main" style={{width: '80%',height:400}}></div>
);
}
}
(7) 运行效果
以上是 在Ant Design Pro(React)中使用ECharts 的全部内容, 来源链接: utcz.com/z/383682.html