亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React - 刪除數組的其余部分而不是僅刪除一項

React - 刪除數組的其余部分而不是僅刪除一項

隔江千里 2024-01-18 16:17:59
這是鏈接: https: //codesandbox.io/s/heuristic-heisenberg-9cxb9我有這個方法:deleteItem這段代碼:  return {    monsters: prevState.monsters      .slice(0, deleteItemPosition)      .concat(        prevState.monsters.slice(          deleteItemPosition + 1,          prevState.monsters.length        )      )  };這是我用來從數組中刪除 itemPosition 位置上的項目的代碼,因為monsters.splice(deleteItemPosition, 1)由于不變性我無法使用。那么為什么我的怪物數組從deleteItemPosition到最后都會被切斷呢?自己嘗試一下,在“要刪除的索引”中輸入 0-5 的數字如果我更新行let deleteItemPosition = this.state.deleteItemPosition;我將其硬編碼為let deleteItemPosition = 3;然后我注意到位置 3 上的項目如我所愿被刪除了。
查看完整描述

2 回答

?
開心每一天1111

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

    })

  };


查看完整回答
反對 回復 2024-01-18
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

只需對數組進行淺表復制monsters,應用Array.prototype.splice刪除項目的方法并返回復制的monsters數組。


const copyMonsters = [...prevState.monsters];

copyMonsters.splice(deleteItemPosition, 1);


return {

  monsters: copyMonsters

}

將此代碼放入setState您的案例的函數中。


查看完整回答
反對 回復 2024-01-18
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號