Javascript 从状态中删除特定项
我只想在单击时从状态中删除一个数组项,但我很难让它正常工作。我的状态如下所示,我希望在单击时删除其中一个数据集(例如标签2) 实际的数据集要大得多,我通常会使用setState重新定义状态,但由于数据量巨大,这并不实用。有没有办法删除这一个数组项?我曾尝试创建一个函数来删除另一篇文章中建议的项,但我只能让它对顶级键起作用Javascript 从状态中删除特定项,javascript,reactjs,Javascript,Reactjs,我只想在单击时从状态中删除一个数组项,但我很难让它正常工作。我的状态如下所示,我希望在单击时删除其中一个数据集(例如标签2) 实际的数据集要大得多,我通常会使用setState重新定义状态,但由于数据量巨大,这并不实用。有没有办法删除这一个数组项?我曾尝试创建一个函数来删除另一篇文章中建议的项,但我只能让它对顶级键起作用 removekey = (keyname) => { let newState = this.state; delete newState
removekey = (keyname) => {
let newState = this.state;
delete newState[keyname];
this.setState(newState)
}
this.removekey('data.datasets[1]');
有几件事:
当您声明newState
时,实际上并没有阻止直接状态突变,因为仅声明一个新变量就创建了对state对象的引用,而不是一个全新的引用。从(this.state.dataset)中尝试Array.from
然后,您可以将该新阵列设置为您所在州的数据集阵列的替代品:
this.setState({dataset:newData})
如果您希望编写一个动态执行此操作的函数,我将编写一个直接获取索引并编辑数据数组的函数:
removeItem = (index) => {
let newData = Array.from(this.state.datasets);
newData.splice(index, 1);
this.setState({ datasets: newData })
}
newData.splice(索引1)代码>?谢谢你,这是一个非常好的、有洞察力的回答,对我很有用。如果我想切换此数据,是否有一种简单的方法将其回调?删除该项是一个相当持久的操作。如果您只是想隐藏/显示它们,但要保留它们,可以在对象上添加一个新的键来管理它,或者为隐藏的对象创建一个新的索引数组。
removeItem = (index) => {
let newData = Array.from(this.state.datasets);
newData.splice(index, 1);
this.setState({ datasets: newData })
}