为什么我的拼接删除了除第一个以外的所有拼接而不是仅删除指定的拼接?

Why is my splice deleting all but the first instead of only the one specified?

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

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

拼接方法returns 删除的项目数组。您正在将移除的项目存储回状态。因此,为什么你得到你删除的东西。

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

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

你需要做这样的事情:

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