React Js,将新对象添加到数组中[重复]

Posted

技术标签:

【中文标题】React Js,将新对象添加到数组中[重复]【英文标题】:React Js, adding new object to an array [duplicate] 【发布时间】:2018-08-01 23:36:07 【问题描述】:

我有一个文本字段和一个单选按钮。

我正在制作这两个值的对象并将其放入一个数组中,以便我可以将其存储在 Mongo DB 中。

我正在构造一个对象数组并尝试迭代以在表格中显示详细信息。

无法显示详细信息。

为此需要帮助。

 export class AddColumns extends React.Component

  constructor(props) 
      super(props);
        this.state=
            newItemInput: '',
            selectedValue: '',
            buyItems :[],
            object : 
        
      

  handleChange=(event)=> 
    this.setState(
      ...this.state,
      selectedValue: event.target.value
    );
  ;

  change (event)
    this.setState(
      [event.target.name]:event.target.value
    );
  ;

addItem(e)
    e.preventDefault();

    const newItemInput = this.state.newItemInput;
    const newRadioValue = this.state.selectedValue;
    const obj = 'item':newItemInput, 'columnType':newRadioValue;
    this.state.buyItems.push(obj);
    console.log(this.state.buyItems);       
  

  render()
    const buyItems,message = this.state;
    return (
      <div className="container">
          <form className="form-inline" onSubmit=(e) => this.addItem(e)>
            <div className="form-group">
              <label className="sr-only" htmlFor="newItemInput">Add New Item</label>
              <input type ="text" ref =input => this.newColumn = input name="newItemInput" placeholder="Modules" value = this.state.newItemInput className="form-control" 
                      id="newItemInput" onChange=event => this.change(event)/>
            </div>

            <div className="k-form-field">
              <input type="radio" name="radio" value="radio1" className="k-radio" onChange=this.handleChange/>
              <label className="k-radio-label">RadioButton 1</label>

              <input type="radio" name="radio" value="radio2" className="k-radio" onChange=this.handleChange/>
              <label className="k-radio-label">RadioButton 2</label>

            <div className="form-group">
              <button type="submit" className="btn btn-primary">Add</button><p>this.state.messgae</p>
            </div>
          </form>
        <div className="content">
          <div>
                  
                    buyItems.map((rowdata,i) =>  
                        <div>
                          rowdata.item
                        </div>
                    )
                  
            </div>      
        </div>
      </div>
      );
  

【问题讨论】:

如何将对象数组迭代到表中? 【参考方案1】:

要更新视图,您必须调用 setState,而不仅仅是将项目推送到数组,您可以使用扩展语法轻松完成:

addItem(e)
    e.preventDefault();
    const newItemInput = this.state.newItemInput;
    const newRadioValue = this.state.selectedValue;
    const obj = 'item':newItemInput, 'columnType':newRadioValue;
    this.setState(
        buyItems: [...this.state.buyItems, obj]
    );
    console.log(this.state.buyItems);       

另一种方法是创建旧数组的副本,推送新项目并继续设置状态:

addItem(e)
    e.preventDefault();
    const newItemInput = this.state.newItemInput;
    const newRadioValue = this.state.selectedValue;
    const obj = 'item':newItemInput, 'columnType':newRadioValue;
    const newArray = this.state.buyItems.slice(); // Create a copy
    newArray.push(obj); // Push the object
    this.setState( buyItems: newArray );
    console.log(this.state.buyItems);       

【讨论】:

如何将对象数组迭代到表中 @mohan 如果仍有疑问,您应该考虑研究并提出一个新问题。这里有一些东西可以帮助您入门:***.com/questions/39137647/…

以上是关于React Js,将新对象添加到数组中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 是不是具有将持久对象的副本添加到重复数组的内置方法

原生JS我打算在把数据存在缓存数组中,再从数组中取出数据在另一个页面取出做表格,怎么不重复添加?

使用带有 JavaScript 的 for 循环时,将新列表项添加到 <ul> 项 [重复]

将新组件动态添加到 JSF 组件树时重复 id

将新属性添加到字符串类 C# [重复]

防止将重复的对象添加到 state react redux