REACT - 在数组中映射不可变动态

时间:2018-03-13 01:51:15

标签: javascript html reactjs ecmascript-6

我在页面上动态创建输入字段,以便将新用户添加到联系簿。对于我使用on click事件创建的每个用户,我将一个新的用户对象附加到一个数组。然后,此对象将放置在其属性中的动态状态,因此我可以使用我创建的输入字段更新每个设置这些项的值。但是,我无法访问或更改users数组中的对象。我该怎么做才能解决这个问题?

appendUser() {
  let usersLength = this.state.users.length;
  let newUser = {
    name : '',
    age : '',
    birthday : '',
  };

  this.setState({ users: this.state.users.concat([newUser]) });  

  for (let i = 0; i < usersLength; i++) {
    updateItem(i, this.state.users[i] = {
        name : this.state.users[i].name,
        age : this.state.users[i].age,
        birthday : this.state.users[i].birthday,
      }
    )    
  }

}

updateItem(id, itemAttributes) {
  let index = this.state.users.findIndex(x => x.id === id);
  if (index === -1) {
    console.error('error in update')
  } else {
    this.setState({
      users: [
       ...this.state.users.slice(0,index),
       Object.assign({}, this.state.users[index], itemAttributes),
       ...this.state.users.slice(index+1)
      ]
    });
  }
}

我的输入表单组件,它在点击时创建字段:

render() {
  return (
    <div>
      {this.props.users.map((user, index) =>
        <formgroup key={index}>
          <input name={'name'} type="string" onChange={this.props.handleChange} value={this.props.name} required />
          <input name={'age'} type="string" onChange={this.props.handleChange} value={this.props.age} required />
          <input name={'birthday'} type="string" onChange={this.props.handleChange} value={this.props.birthday} required />
        </formgroup>
      )}
        <button onClick={ this.props.appendUser }>Add Another User</button>
    </div>
  )
}

和handleChange函数

  handleChange(e) {
    this.setState({[e.target.name]: e.target.value})
  }

0 个答案:

没有答案