所以,这是我的代码。关于如何将state
元素与indexin key
一起使用,我有一个简单的问题?在这种情况下,我需要为不同的data
索引元素设置不同的值。
import React, { Component } from 'react';
import {Doughnut} from 'react-chartjs-2';
class Chart extends Component {
constructor(props) {
super(props);
this.state = {
labels: ["All", "Done", "Active"],
datasets: [{
label: "Todos",
backgroundColor: 'grey',
borderColor: 'green',
data: [0, 0, 0]
}]
};
}
getTodosList = (todos) => {
const all = [];
const active = [];
const done = [];
todos.filter(todo => {
if (todo.status === 'active') {
active.push(todo);
} else if (todo.status === 'all') {
all.push(todo);
} else if (todo.status === 'done') {
done.push(todo);
}
});
this.setState({
datasets[0].data[0]: all, // error
datasets[0].data[1]: active, // error
datasets[0].data[2]: done // error
});
}
答案 0 :(得分:1)
很简单:
this.setState({
datasets: [...this.state.datasets,
{
data: [all.length, active.length, done.length]
}
]
});
开始像Redux一样思考。使用纯函数。它会帮助你。我也根据你的开始data
了解 - 您可能需要使用length
的{{1}} ...
答案 1 :(得分:0)
setState
函数不知道它必须用您的代码替换哪个对象。您还没有正确访问数据集变量,它应该是this.state.datasets
。你可以这样做:
let datasets = this.state.datasets.slice();
datasets[0].data[0] = all;
datasets[0].data[1] = active;
datasets[0].data[2] = done;
this.setState({datasets});