Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从状态中删除特定项_Javascript_Reactjs - Fatal编程技术网

Javascript 从状态中删除特定项

Javascript 从状态中删除特定项,javascript,reactjs,Javascript,Reactjs,我只想在单击时从状态中删除一个数组项,但我很难让它正常工作。我的状态如下所示,我希望在单击时删除其中一个数据集(例如标签2) 实际的数据集要大得多,我通常会使用setState重新定义状态,但由于数据量巨大,这并不实用。有没有办法删除这一个数组项?我曾尝试创建一个函数来删除另一篇文章中建议的项,但我只能让它对顶级键起作用 removekey = (keyname) => { let newState = this.state; delete newState

我只想在单击时从状态中删除一个数组项,但我很难让它正常工作。我的状态如下所示,我希望在单击时删除其中一个数据集(例如标签2)

实际的数据集要大得多,我通常会使用setState重新定义状态,但由于数据量巨大,这并不实用。有没有办法删除这一个数组项?我曾尝试创建一个函数来删除另一篇文章中建议的项,但我只能让它对顶级键起作用

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 })
}