簡體   English   中英

更新嵌套數組 React 中的對象值

[英]Updating an object value in nested array React

我正在嘗試更新 React App 的狀態對象中的值。 我能夠更改狀態字符串,但我似乎無法弄清楚如何訪問每個戰斗機的 hp 密鑰 - 我嘗試了不同的方式(我在這個例子中寫了 2)但沒有任何成功。 當您有一個包含嵌套對象的數組時,訪問每個戰斗機的鍵的正確方法是什么?

export default class App extends Component {
 state = {
  status: 'Fighters are Ready...',

   fighters: [
     {
       name: 'Fighter 1',
       hp: 150,
       image: ''
     },
     {
       name: 'Fighter 2',
       hp: 150,
       image: ''
     }
   ]
 }

 handleClick = (e) => {
  // console.log(e)
  if (e.target.name === 'Fighter 1') {
    this.setState({
       hp : this.state.fighters[1].hp - 10,
      status: e.target.name + ' is attacking ' + this.state.fighters[1].name
    })
  } else {
    this.setState({
      [Object.keys(this.state.fighters)[0].hp] : this.state.fighters[0].hp - 10,
      status: e.target.name + ' is attacking ' + this.state.fighters[0].name
    })
  }
  
 }

您需要確保返回與原始狀態相同形狀的對象,同時還要避免突變。 這里將當前狀態傳播到一個新對象中,更新status字符串,然后使用map()調用迭代fighters數組並更新與event.target匹配的 fighter。

handleClick = (e) => {
  // console.log(e)
  this.setState({
    ...this.state,
    status: e.target.name + ' is attacking ' + this.state.fighters.find(f => f.name !== e.target.name)?.name,
    fighters: this.state.fighters.map(fighter =>
      fighter.name !== e.target.name
        ? ({ ...fighter, hp: fighter.hp - 10 })
        : fighter)
  })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM