React 使用 .push 通过 onClick 添加到数组

IT技术 javascript arrays reactjs ecmascript-6
2021-05-12 01:09:19

我正在尝试添加到我现有的称为播放器的数组(这是导入到我的父级的外部文件“players.js”)。

我可以写:

 players.push({
  name: 'Maul',
  id: 26
});

这是因为 ID 用于键并且名称在数组中更新。

但是,如果我写

   handleAddPlayer = () => {
    console.log('i am working');
    players.push({
      name: 'Maul',
      id: 26
    });
  };

在我的按钮上我有

    <div>
      <h4>Add A Player</h4>
      <input />
      <button onClick={this.handleAddPlayer}>Press to Add Player</button>
    </div>

我的状态如下:

  this.state = {
  id: players.id,
  totalScore: 0,
  countInfo: [],
  evilName: '',
  color: '#6E68C5',
  scoreColor: '#74D8FF',
  fontAwe: 'score-icon',
  incrementcolor: '',
  scoreNameColor: 'white',
  glow: '',
  buttonStyle: 'count-button-start',
  players,
};

这是行不通的。

从这里我有两个问题:

  1. 为什么当我单击按钮时它不会更新,但之前不能作为功能使用?

  2. 我想在输入中输入一个名称并生成一个添加到我的数组中的唯一键,players.js

我试过 concatenate 并没有太大的成功。

1个回答

Players 是 state 对象上的一个属性,因此您需要调用 setState 来更新该属性:

handleAddPlayer = () => {
  // create a clone of your array of players; don't modify objects on the state directly
  const players = this.state.players.slice(0);

  players.push({
    name: 'Maul',
    id: 26
  });

  this.setState({
    players: players,
  });
};