【发布时间】:2020-12-24 23:05:43
【问题描述】:
这是链接: https://codesandbox.io/s/heuristic-heisenberg-9cxb9
我有这个方法:deleteItem
这段代码:
return {
monsters: prevState.monsters
.slice(0, deleteItemPosition)
.concat(
prevState.monsters.slice(
deleteItemPosition + 1,
prevState.monsters.length
)
)
};
这是我用于从位置 deleteItemPosition 的数组中删除项目的代码,因为由于不可变性,我不能使用 monsters.splice(deleteItemPosition, 1)。
那么为什么我的怪物数组从 deleteItemPosition 到最后都被切断了? 自己试试,在“要删除的索引”中输入一些数字 0-5
如果我更新线路
let deleteItemPosition = this.state.deleteItemPosition;
我把它硬编码成,比如说
let deleteItemPosition = 3;
然后我注意到位置 3 上的项目被删除了,正如我所愿。
【问题讨论】:
-
在不改变的情况下删除一个项目在 ES6 中应该有点简单,使用 delete prevState.monsters[deleteItemPosition]; return {...prevState};,这就是 setState 回调中所需要的全部
-
是的,谢谢。这是最好的做法吗?
-
为什么不呢,你没有改变状态并提供一个新的副本作为回报,它对我来说一直很好
-
我开枪了..它不起作用。删除位置 2 上的项目后,就无法再次删除位置 2 上的项目,数组不会刷新。
-
唯一的原因可能是使用数组索引作为键
标签: javascript reactjs