我有两个组件:应用程序和注册表单
该表单有两个输入:姓名和姓氏
查看 dev 中的 App 状态。我看到的工具长度:未定义和名称:“输入的名称”。我没有收到任何错误,但我缺少姓氏。
这只发生在 Rails 中。我在非 Rails 环境中尝试了相同的代码,它工作正常。我将这个 gem 用于 React:gem 'react-rails', '~> 1.5.0' 并运行 Rails 4.2.4
var App = React.createClass({
getInitialState : function(){
return {
registrations: {}
}
},
addRegistration : function(registration){
// create unique id
var timestamp = (new Date()).getTime();
// update state
this.state.registrations['registration-' + timestamp] = registration;
//set the state
this.setState({ registrations : this.state.registrations });
},
render : function(){
return (
<RegistrationForm addRegistration={this.addRegistration}/>
)
}
});
var RegistrationForm = React.createClass({
createRegistration : function(event){
// prevent default
event.preventDefault();
// take data from form and create object
var registration = {
name : this.refs.name.value,
lastname : this.refs.lastname.value
}
// Add registration to App Object
this.props.addRegistration(registration);
this.refs.registrationForm.reset();
//console.log(registration);
},
render : function(){
return (
<div className="col-sm-12">
<form action="" className="form" ref="registrationForm" onSubmit={this.createRegistration}>
<div className="form-group">
<label >Name</label>
<input className="form-control" ref="name"/>
</div>
<div className="form-group">
<label >Last Name</label>
<input className="form-control" ref="lastname"/>
</div>
<div>
<button className="btn btn-primary">Submit</button>
</div>
</form>
</div>
)
}
});
App = React.createFactory(App)
我要做的是根据时间戳为每个注册提供一个唯一的 ID 号。
当我控制台记录以下内容时:
addRegistration : function(registration){
// create unique id
var timestamp = (new Date()).getTime();
// update state
this.state.registrations['registration-' + timestamp] = registration;
//set the state
this.setState({ registrations : this.state.registrations });
},
我可以按照我想要的方式查看注册对象。我可以向 App 状态添加尽可能多的唯一注册,但每个注册都有 length: undefined, name: "name" ,但它缺少姓氏。
如果我将设置状态更改为:
this.setState({ registrations : registration });
这给了我一个包含姓名和姓氏的单一注册,但它不会添加多个注册。它只创建一个注册,每次我提交添加注册表单时都会更新。