У меня есть два компонента: App и регистрационная формаReact.js - Рельсы: Установить государственные
Форма имеет два входа: Имя и Фамилию
Глядя на состоянии приложения в Dev. tools I see length: undefined и name: "name into". Я не получаю никаких ошибок, но мне не хватает фамилии.
Это происходит только в Rails. Я пробовал один и тот же код в среде без рельсов, и он отлично работает. Я использую этот драгоценный камень для React: драгоценный камень «реагируют поручни», «~> 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 });
},
Я могу видеть, регистрация объекта так, как я хочу. Я могу добавить столько уникальных регистраций в состояние приложения, но каждая регистрация имеет длину: undefined, name: «name», но отсутствует фамилия.
Если изменить установленное состояние на это:
this.setState({ registrations : registration });
Это дает мне единственную регистрацию имени и фамилии, но это не добавляет несколько регистраций. Он создает только одну регистрацию, которая обновляется каждый раз, когда я отправляю добавленную регистрационную форму.
Спасибо за вашу помощь, но то, что вы предлагали не работать. – Asan
сейчас я получаю эту ошибку: Uncaught TypeError: clonedRegistration.slice не является функцией – Asan
@Asan попробуйте использовать второй вариант, ваши 'this.state.registrations' не являются массивом. – oobgam