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

Posted

技术标签:

【中文标题】React 使用 .push 通过 onClick 添加到数组【英文标题】:React use .push to add to an array with onClick 【发布时间】:2017-12-13 00:49:38 【问题描述】:

我正在尝试添加到我现有的名为 player 的数组(这是一个外部文件“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,
;

它不起作用。

从这里我有两个问题:

    为什么我点击按钮不更新,但之前不能作为功能使用?

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

我尝试过连接,但没有取得很大成功。

【问题讨论】:

您能告诉我们您遇到的错误吗?不是“无法读取未定义的属性‘push’”吗? 我没有收到任何错误,因为没有任何反应 【参考方案1】:

Players 是状态对象的一个​​属性,因此您需要调用 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,
  );
;

【讨论】:

好吧,这就像一个魅力,我也学到了很多东西,所以谢谢你!您能否帮助我理解 &lt;input&gt; 如何将值传递到名称中并且 id 可以是唯一数字? 等等,我得到了随机的#,我想通了。现在只需将值从 &lt;input&gt; 传递到 name: 区域 看看facebook.github.io/react/docs/forms.html#controlled-components,一种方法是在状态上添加一个属性,例如value,它维护文本输入的值,然后将您的输入更新为@987654328 @。那么你的handleAddPlayer方法就可以简单的看一下this.state.value来提取输入框中的值。

以上是关于React 使用 .push 通过 onClick 添加到数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 onClick 方法通过 react-router 传递道具

在 React 中使用 onClick 更改元素内容

TypeError:无法读取 null 的属性(读取“推送”)react.js

React - 通过事件onClick在子组件到父组件中显示所选列表项

history.push 使用 react-router-dom

React Context - setState 与消费者内部的 onClick