首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >React Native正在更新状态中嵌套对象的单个属性

React Native正在更新状态中嵌套对象的单个属性
EN

Stack Overflow用户
提问于 2019-08-08 02:41:13
回答 2查看 217关注 0票数 4

我正在尝试更新嵌套状态对象的单个属性,并将其返回给状态。我有需要更新的对象的索引,但我正在努力更改一个属性并将新对象添加回状态。

我的状态对象看起来像这样,我正在尝试减少一个按下按钮的玩家的生命。

我一直在尝试使用数组过滤器,试图复制对象并将其添加回状态,但这会丢失对象的位置。

代码语言:javascript
复制
this.state = {
  players: {
    {id: 1, lives: 3, name: something},
    {id: 2, lives: 3, name: something}
  }
} 
代码语言:javascript
复制
public removeLife(id): void {
   const player = this.state.players[id];
   player.lives = player.lives - 1;
   this.setState({players[id]: {...player}
   })
}

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-12 21:33:22

在做了一些研究之后,我发现更新嵌套状态中的单个对象的最好方法是浅层复制状态,更改对象,然后将允许的状态对象重新分配回状态。如下所示:

代码语言:javascript
复制
    public removeLife(event, id): void {
    const newState = Object.assign([], this.state.players);
    const indexOfPlayer = newState.findIndex(selectedPlayer => selectedPlayer.id === id);
    const player = newState[indexOfPlayer];

    player.lives = player.lives - 1;

    this.setState({players: newState})
}
票数 2
EN

Stack Overflow用户

发布于 2019-08-08 02:47:50

因为你的state包含一个对象的对象,所以我建议你把它变成一个对象的数组:

代码语言:javascript
复制
this.state = {
  players: [
    {id: 1, lives: 3, name: something},
    {id: 2, lives: 3, name: something}
  ]
}

您需要像这样处理更新(例如,更新索引1中的播放器):

代码语言:javascript
复制
this.setState({
    players: {...this.state.players, 
       players[1]: {...this.state.players[1], lives: this.state.players[1].lives + 1 }
    }
})

或者尝试一下(我遵循你的函数):

代码语言:javascript
复制
public removeLife(id): void {
   const player = this.state.players[id];
   player.lives = player.lives - 1;
   this.setState({players: {
       ...this.state.players,
       players[id]: {...player}
       }
   })
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57400524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档