![](/img/trans.png)
[英]How do I get a chart.js chart to display data in a Node/React web application?
[英]How do I mutate Chart.js data using React state?
在我的项目中,我希望在两组数据之间切换:当周每天工作的总小时数,以及当年每个月的总工作小时数。 我能够在我的按钮处理程序中实现 Chart.js label 操作,但我无法修改状态的数据属性。 我在这里想念什么? 感谢您的帮助。
注意:注释的代码在未注释时会产生此错误语句: Uncaught TypeError: nextDatasets.map is not a function
LineChart.js
const [userData, setUserData] = useState({
labels: Object.keys(daysData),
datasets: [
{
label: "Hours worked",
data: Object.values(daysData),
backgroundColor: "red",
borderColor: "black",
borderWidth: 2,
},
],
});
const onShowWeeklyHandler = () => {
setUserData({ labels: Object.keys(daysData) });
// setUserData({ datasets: { data: Object.keys(daysData) } });
};
const onShowMonthlyHandler = () => {
setUserData({ labels: Object.keys(monthsData) });
// setUserData({ datasets: { data: Object.keys(monthsData) } });
};
您可能会遇到问题,因为您尝试将 state 与 useState 挂钩进行浅层合并。 React 不支持这个。 有关更多信息,请参阅此答案。
如果那不能解决您的问题,您是否研究过 react-chartjs-2 ? 您可能可以通过以下方式实现您想要的目标。
在您的父组件(包含图表的组件)中:
import { Bar } from "react-chartjs-2"; // import whatever chart type you need
...
const [userData, setUserData] = useState({
labels: Object.keys(daysData),
datasets: [
{
label: "Hours worked",
data: Object.values(daysData),
backgroundColor: "red",
borderColor: "black",
borderWidth: 2,
},
],
});
那么你的处理程序可以是:
const onShowWeeklyHandler = () => {
setUserData({
...userData,
datasets: {
...userData.datasets,
labels: Object.keys(daysData),
data: Object.values(daysData),
},
});
};
const onShowMonthlyHandler = () => {
setUserData({
...userData,
datasets: {
...userData.datasets,
labels: Object.keys(monthsData),
data: Object.values(monthsData),
},
});
};
最后:
return <Bar data={userData.datasets} />; // adapt for whatever chart type you need
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.