Chartjs无法读取未定义的属性数据集
2018-01-05
13178
我正在开发一个 React 应用,并尝试让 Chartjs 从其 npm 包中导入后运行。以下是初始化代码:
//in my constructor
this.usageChart = null;
//in componentDidMount
let chartContext = document.getElementById("proc_usage");
let initialDataIdle = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100];
let initialDataOther = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
console.log("Creating chart");
this.usageChart = new Chart(chartContext, {
type: "line",
data: {
datasets: [
{ label: "User", fill: true, data: initialDataOther, backgroundColor: "rgba(244, 143, 177, 0.8)" },
{ label: "System", fill: true, data: initialDataOther, backgroundColor: "rgba(255, 235, 59, 0.8)" },
{ label: "IRQ", fill: true, data: initialDataOther, backgroundColor: "rgba(100, 181, 246, 0.8)" },
{ label: "Idle", fill: true, data: initialDataIdle, backgroundColor: "rgba(150, 150, 150, 0.4)" }
]
},
options: {
scales: {
xAxes: [{ stacked: true }],
yAxes: [{ stacked: true }]
},
plugins: {
stacked100: { enable: true }
}
}
});
console.log("Chart created: " + this.usageChart.data);
问题是当我尝试更新图表时,
this.usageChart.data
未定义。事实上,在初始化期间的最后一个
console.log()
调用中,它也是未定义的。我看不出我做错了什么。我正在加载一个插件,它允许将折线图绘制为堆叠,线条之间的区域表示百分比。我不知道是否是这个插件的问题,但我没有收到任何错误,代码或多或少是从插件的示例代码中逐字逐句摘录的。
这是我更新图表的代码:
//from componentDidUpdate
usages['User'] = userUsage;
usages['System'] = sysUsage;
usages['IRQ'] = irqUsage;
usages['Idle'] = idleUsage;
console.log("updating chart");
this.usageChart.data.datasets.forEach((dataset) => {
dataset.data.shift();
dataset.data.push(usages[dataset.label]);
});
this.usageChart.update();
console.log("chart updated");
2个回答
事实证明,我正在使用错误的NPM软件包。
被警告,有人已经坐了2年了 contarjs < /a> 带有过时的,陈旧的github储备金。真实的软件包名称为 Chart.js.js 。 非常 烦人。
Luke
2018-01-08
我确实为您创建了一个 fiddle (我只是将您的代码复制到自定义组件中),并且我的情况没有错误。
我认为这里有错误,因为您的图表未正确更新:
this.usageChart.data.datasets.forEach((dataset) => {
dataset.data.shift();
dataset.data.push(usages[dataset.label]);
});
更正版本:
您错误地更新了数据集:
this.usageChart.data.datasets.forEach((dataset) => {
dataset.data.shift();
dataset.data = usages[dataset.label];
});
请检查正常工作的 fiddle 并将其与您的项目进行比较。
luke
2018-01-08