Antv F2图表点击出现抖动、空白、重叠解决方案
2021-08-06 15:19:28
# 问题:Antv F2图表点击出现抖动、空白、重叠解决方案
# 原因:数据(data)发生改变,重新new F2 的时候,之前的内容没清空导致的
# 解决方案:chart.clear()清除内容,重新绘制
```
import React, {Component} from "react";
import F2 from "@antv/f2";
import dayjs from "dayjs"
import "./style.less"
class Line extends Component {
static defaultProps = {
data: [],
};
// 属性(props) 发生改变的时候调用
componentWillReceiveProps(nextProps) {
// 检查数据判断是否发生变化,变化就清除内容,重新渲染图表
if (JSON.stringify(nextProps.data) !== JSON.stringify(this.props.data)) {
this.chart.clear();
this.initDraw(nextProps.data);
}
}
// 装载完成,在render之后调用
componentDidMount() {
this.initDraw(this.props.data);
}
// 初始化图表
initDraw = (data) => {
if (!data) {
return
}
// 因为首位和末位时间相同,但是图标会自动合并,所以给最后一位添加了一个空格
for (let i = 0; i < data.length; i++) {
data[i].date = dayjs("1990-01-01 " + data[i].date).format("HH:mm")
if (i === (data.length - 1)) {
data[i].date = data[i].date + " "
}
}
const chart = new F2.Chart({
id: 'lineChart',
pixelRatio: window.devicePixelRatio
});
// 将chart 赋值给this.chart ,仅能通过这种方式去判断chart是否存在
this.chart = chart;
chart.source(data, {
value: {
tickCount: 6, // todo
min: 0
},
date: {
range: [0, 1],
tickCount: 6
}
});
chart.axis('date', {
label: function label(text, index, total) {
const textCfg = {};
if (index === 0) {
textCfg.textAlign = 'left';
} else if (index === total - 1) {
textCfg.textAlign = 'right';
}
return textCfg;
}
});
chart.line().position('date*value').style({
lineWidth: 3,
stroke: '#5c7bd9',
});
chart.point().position('date*value').style({
stroke: '#5c7bd9',
lineWidth: 2,
fill: '#fff',
});
chart.render();
};
render() {
return (
<React.Fragment>
{/*产值汇总图表*/}
<div className={'chart'}>
<div className={'title'}>{this.props.title}</div>
<div className={'canvas'}>
<canvas id="lineChart"/>
</div>
</div>
</React.Fragment>
);
}
}
export default Line
```