【发布时间】:2015-12-29 07:21:47
【问题描述】:
我正在尝试让 Chart.js 与 React.js 一起工作,我已经接近了。
我让 React 渲染了正确的图表,当我改变状态时,新图表被绘制在另一个图表之上。问题是悬停事件显然留在了canvas 上,将鼠标移到它上面会闪现之前制作的所有版本的图表。
据我所知,这是 Chart.js 中的一个错误,解决方案是删除 canvas 元素并用新的画布元素替换它。
所以我有这段代码,它可以在页面上获取图表:
var LineChart = React.createClass({
render: function() {
return (
<div id="lineHolder" className="graphHolder">
<h2 className="sectionHeader">Earnings per day</h2>
<canvas id="lineChart" width="688" height="286"></canvas>
</div>
);
},
ctx: {},
lineChart: {},
componentDidMount: function() {
this.drawChart();
},
componentDidUpdate: function() {
this.drawChart();
},
drawChart: function() {
var lineData = {
labels: this.props.dates,
datasets: [{
label: "Earnings",
fillColor: "rgba(151,187,205,0.2)",
strokeColor: "rgba(151,187,205,1)",
pointColor: "rgba(151,187,205,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(151,187,205,1)",
data: this.props.earnings,
}]
}
this.ctx = document.getElementById("lineChart").getContext("2d");
this.lineChart = new Chart(this.ctx).Line(lineData);
}
});
但我想不出“反应方式”来删除和替换该画布元素,每次需要重绘时。
有什么想法吗?
【问题讨论】:
-
在分配值之前,你认为像 $("lineChart").empty() 这样清空画布是什么意思
-
@dhavalpatel,这个应用程序现在没有 jQuery。我可能会在稍后添加它,但如果可能的话,我想将这部分保留为 React.js 的样式
-
document.getElementById("lineChart").innerHTML = "";
-
请不要使用像innerHTML这样的直接DOM操作方法。
标签: javascript html canvas reactjs chart.js