当前位置: 首页 > 知识库问答 >
问题:

正在从处于组件状态的数组中删除元素

焦光霁
2023-03-14

我正在试图找到最好的方法,从处于组件状态的数组中删除元素。既然我不应该直接修改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中的回调。在更新当前状态时,应在引用当前状态时执行此操作。

共有3个答案

卢志业
2023-03-14

我认为不鼓励在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对象引用;

茹照
2023-03-14

您可以使用react-addons-date中的date()不可变性帮助器,它在引擎盖下有效地做同样的事情,但是您正在做的事情很好。

this.setState(prevState => ({
  data: update(prevState.data, {$splice: [[index, 1]]})
}))
空英逸
2023-03-14

我见过的最干净的方法是使用过滤器

removeItem(index) {
  this.setState({
    data: this.state.data.filter((_, i) => i !== index)
  });
}

 类似资料:
  • 问题内容: 我试图找到在组件状态下从数组中删除元素的最佳方法。由于我不应该直接修改变量,是否有比我在这里有更好的方法(更简洁)从数组中删除元素?: 谢谢。 更新 这已更新为在setState中使用回调。在更新当前状态时,应执行此操作。 问题答案: 我见过的最干净的方法是:

  • 问题内容: 故事是,我应该能够将鲍勃,莎莉和杰克放进盒子里。我也可以从包装盒中取出。卸下后,将不留任何插槽。 我现在需要删除“鲍勃”。新的数组将是: 这是我的反应成分: 在这里,我向您展示了一个最少的代码,因为它包含更多内容(onClick等)。关键部分是从数组中删除,删除,销毁“ Bob”,但调用时不起作用。有任何想法吗?我一直在看这个,但由于使用React,所以我可能做错了。 问题答案: 要从

  • 问题内容: 有什么快速(好看的)方法可以从Java中的数组中删除元素? 问题答案: 你可以使用的。

  • 问题内容: 有没有一种简单的方法可以使用PHP从数组中删除元素,从而不再包含该元素? 我以为将它设置为可以实现,但是显然不起作用。 问题答案: 有多种删除数组元素的方法,其中某些方法对某些特定任务比其他任务更有用。 如果只想删除一个数组元素,则可以使用或。 另外,如果您具有值并且不知道要删除元素的键,则可以使用该键来获取键。 请注意,使用数组键时不会更改/重新索引。如果要重新索引键,则可以使用它,

  • 问题内容: 我有一个原始类型数组,我想从中删除指定索引处的元素。正确而有效的方法是什么? 我正在寻找以下面提到的方式删除元素 但是上述方法看起来只能与Object一起使用,而不能与原语一起使用。 还有其他选择吗?我不能使用任何第三方/附加库 问题答案: 您需要创建一个新数组并复制元素。例如这样的事情: 注意:以上尚未经过测试/调试。 您也可以使用for循环进行复制,但在这种情况下应更快。 该方法最

  • 问题内容: 如何从JavaScript中的数组中删除空元素? 有没有简单的方法,还是我需要遍历它并手动将其删除? 问题答案: 编辑: 大约9年前,当时没有很多有用的内置方法时,就回答了这个问题。 现在,当然,我建议您使用该方法。 请记住,此方法将为您返回 一个新数组, 其中的元素可以通过您提供给它的回调函数的条件。 例如,如果要删除或值: 例如,这将取决于您认为什么是“空”,如果您正在处理字符串,