2 回答

TA貢獻1836條經驗 獲得超13個贊
您的deleteItem函數可以像這樣簡化,同時確保不會跳過任何狀態更新:
deleteItem = () => {
this.setState(prevState => {
return { monsters: prevState.monsters.filter((_, i) => i !== +prevState.deleteItemPosition)};
})
};
建議進行功能更新,因為您的新狀態(新怪物陣列)取決于之前的狀態。
更新:
您可以使用解構來避免prevState一直使用。并且您需要將 轉換deleteItemPosition為數字,因為輸入的值是字符串。
deleteItem = () => {
this.setState(({monsters, deleteItemPosition}) => {
return { monsters: monsters.filter((_, i) => i !== +deleteItemPosition)};
})
};

TA貢獻1810條經驗 獲得超4個贊
只需對數組進行淺表復制monsters,應用Array.prototype.splice刪除項目的方法并返回復制的monsters數組。
const copyMonsters = [...prevState.monsters];
copyMonsters.splice(deleteItemPosition, 1);
return {
monsters: copyMonsters
}
將此代碼放入setState您的案例的函數中。
添加回答
舉報