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