我正在试图找到最好的方法,从处于组件状态的数组中删除元素。既然我不应该直接修改this.state
变量,那么有没有比这里更好(更简洁)的方法从数组中删除元素
onRemovePerson: function(index) {
this.setState(prevState => { // pass callback in setState to avoid race condition
let newData = prevState.data.slice() //copy array from prevState
newData.splice(index, 1) // remove element
return {data: newData} // update state
})
},
谢谢你。
更新了
这已更新为使用setState中的回调。在更新当前状态时,应在引用当前状态时执行此操作。
我认为不鼓励在setState()
中引用this.state
(状态更新可能是异步的)。
文档建议使用带有回调函数的setState()
,以便在更新发生时在运行时传入prevState。这就是它的样子:
在不使用ES6的情况下使用Array.prototype.filter
removeItem : function(index) {
this.setState(function(prevState){
return { data : prevState.data.filter(function(val, i) {
return i !== index;
})};
});
}
使用ES6箭头函数的rray.prototype.filter
removeItem(index) {
this.setState((prevState) => ({
data: prevState.data.filter((_, i) => i !== index)
}));
}
使用不变性助手
import update from 'immutability-helper'
...
removeItem(index) {
this.setState((prevState) => ({
data: update(prevState.data, {$splice: [[index, 1]]})
}))
}
使用扩展
function removeItem(index) {
this.setState((prevState) => ({
data: [...prevState.data.slice(0,index), ...prevState.data.slice(index+1)]
}))
}
请注意,在每个实例中,无论使用哪种技术,this.setState()
都会传递一个回调,而不是对旧的this.state
的对象引用;
您可以使用react-addons-date
中的date()
不可变性帮助器,它在引擎盖下有效地做同样的事情,但是您正在做的事情很好。
this.setState(prevState => ({
data: update(prevState.data, {$splice: [[index, 1]]})
}))
我见过的最干净的方法是使用过滤器
:
removeItem(index) {
this.setState({
data: this.state.data.filter((_, i) => i !== index)
});
}
问题内容: 我试图找到在组件状态下从数组中删除元素的最佳方法。由于我不应该直接修改变量,是否有比我在这里有更好的方法(更简洁)从数组中删除元素?: 谢谢。 更新 这已更新为在setState中使用回调。在更新当前状态时,应执行此操作。 问题答案: 我见过的最干净的方法是:
问题内容: 故事是,我应该能够将鲍勃,莎莉和杰克放进盒子里。我也可以从包装盒中取出。卸下后,将不留任何插槽。 我现在需要删除“鲍勃”。新的数组将是: 这是我的反应成分: 在这里,我向您展示了一个最少的代码,因为它包含更多内容(onClick等)。关键部分是从数组中删除,删除,销毁“ Bob”,但调用时不起作用。有任何想法吗?我一直在看这个,但由于使用React,所以我可能做错了。 问题答案: 要从
问题内容: 有什么快速(好看的)方法可以从Java中的数组中删除元素? 问题答案: 你可以使用的。
问题内容: 有没有一种简单的方法可以使用PHP从数组中删除元素,从而不再包含该元素? 我以为将它设置为可以实现,但是显然不起作用。 问题答案: 有多种删除数组元素的方法,其中某些方法对某些特定任务比其他任务更有用。 如果只想删除一个数组元素,则可以使用或。 另外,如果您具有值并且不知道要删除元素的键,则可以使用该键来获取键。 请注意,使用数组键时不会更改/重新索引。如果要重新索引键,则可以使用它,
问题内容: 我有一个原始类型数组,我想从中删除指定索引处的元素。正确而有效的方法是什么? 我正在寻找以下面提到的方式删除元素 但是上述方法看起来只能与Object一起使用,而不能与原语一起使用。 还有其他选择吗?我不能使用任何第三方/附加库 问题答案: 您需要创建一个新数组并复制元素。例如这样的事情: 注意:以上尚未经过测试/调试。 您也可以使用for循环进行复制,但在这种情况下应更快。 该方法最
问题内容: 如何从JavaScript中的数组中删除空元素? 有没有简单的方法,还是我需要遍历它并手动将其删除? 问题答案: 编辑: 大约9年前,当时没有很多有用的内置方法时,就回答了这个问题。 现在,当然,我建议您使用该方法。 请记住,此方法将为您返回 一个新数组, 其中的元素可以通过您提供给它的回调函数的条件。 例如,如果要删除或值: 例如,这将取决于您认为什么是“空”,如果您正在处理字符串,