我只想从点击状态中删除一个数组项,但是我很难使它起作用。我的状态如下所示,我想在点击时删除其中一个数据集(例如标签2)。
#include <iostream>
#include <string>
#include <vector>
void split (std::string line)
{
std::string::size_type leng=0;
leng=line.length();
std::string k;
for (long unsigned int i=0;i<leng; i++)
{
k.at(i)=line.at(i);
}
std::cout<<k;
}
int main()
{
std::string line = "";
std::cout << "Enter a string: ";
getline(std::cin, line);
split(line);
}
实际的数据集要大很多,我通常只是使用setState重新定义状态,但是由于数据量巨大,这是不实际的。有什么办法可以删除一个数组项吗?我曾尝试创建一个功能来删除该项目,如另一篇文章中所建议的那样,但我只能使它适用于顶级按键。
state = {
data: {
labels: time,
datasets:[
{
"label": "Label 1",
},
{
"label": "Label 2",
},
{
"label": "Label 3",
},
]
}
}
答案 0 :(得分:-1)
几件事:
声明newState
时,实际上并没有阻止直接的状态突变,因为仅声明一个新变量会创建对状态对象的引用,而不是一个全新的引用。尝试Array.from(this.state.datasets)
。
然后,您可以将新阵列设置为您所在状态的datasets
阵列的替代者:
this.setState({ datasets: newData })
。
如果您想编写一个函数来动态地执行此操作,我将编写一个带有索引并直接编辑数据数组的函数:
removeItem = (index) => {
let newData = Array.from(this.state.datasets);
newData.splice(index, 1);
this.setState({ datasets: newData })
}