为什么我的接头会删除除第一个接头以外的所有接头,而不是所有指定的接头?

问题描述

对于给定的数组,当我运行拼接时,除第一个条目外的所有内容都会被删除。但是,我希望只删除选定的条目。我怀疑这与我的设置有关,但我不确定是什么问题。

removethisone = (i) => {this.setState(state=>({list: state.list.splice(i,1)}))}

    <ul>
    {this.state.list.map((entry,i)=><li key={i}><button onClick={this.removethisone}>{i+1}</button>{entry}</li>)}
    </ul>

解决方法

您的代码完全按照您的描述运行,因为splice works就是这样。

splice方法返回一个已删除项目的数组。您正在将删除的项目存储回状态。因此,为什么要删除内容。

removethisone = (i) => {
  this.setState(state => {
    const list = state.list;
    const removedElems = list.splice(i,1);
    console.log(removedElems);
    return {
      list
    }
  })
}
,

发生这种情况的原因是因为Array.splice方法返回了从数组中删除的项目。

您需要执行以下操作:

removethisone = (i) => {
  this.setState(state => {
    const nextState = [ ...state.list ]
    nextState.splice(i,1)

    return { list: nextList }
  })
}

例如,运行下面的代码以查看输出:

// This is what your code does
let numbers = [1,2,3,4,5];
let removedNumbers = numbers.splice(2,1)
numbers = removedNumbers

console.log(numbers);
console.log(removedNumbers);