在React中将数组元素作为对象的一部分推送

时间:2019-06-18 08:37:26

标签: javascript arrays reactjs react-native

我上了这个课:

export default class Player {
  constructor() {
    this.scores = [];
  }

 // Insert a new score and keep top N
 insertScore = (score) => {
    this.scores.push(score);
    this.scores.sort((a, b) => b - a);
    if (this.scores.length > N) this.scores.pop();
  };
}

属于组件状态的一部分

export default class Menu extends React.PureComponent {
   contructor(props){
     super(props);
     this.state = {
       player: new Player()
     }
   }

   onEndGame(score) {
     player.insertScore(score);
   }
   ...
}

由于将数组作为状态的一部分进行更改,因此它在React中非常棘手(如this中所述),在这种情况下insertScore是“合法”吗?

1 个答案:

答案 0 :(得分:1)

您正在直接修改状态(this.state.player.scores)的嵌套属性,因此不正确。

我会尝试的:

播放器类

insertScore = (score) => {
    this.scores.push(score);
    this.scores.sort((a, b) => b - a);
    if (this.scores.length > N) this.scores.pop();

    return this;
};

菜单类

onEndGame(score) {
    this.setState({
       player: this.state.player.insertScore(score);
    });
}