У меня есть компонент, который обрабатывает заявку на контактный форум от пользователя. Я хочу принять состояние, которое пользователь представляет и добавляет в мои реквизиты. Сейчас все работает, но handleSubmit, я не уверен, как взять состояние и передать его в мой this.data.props, чтобы обновить данные, чтобы включить новый объект.Реагировать обновление реквизита с данными состояния
Мои данные - это массив объектов. Состояние принимает пользовательский ввод и само обновление. Затем я хочу взять объект state и добавить его в свой файл props.data, а затем отобразить его на экране.
EDIT: обновляется с последними КОДЕКСА
import React, { Component, PropTypes } from 'react';
const testData = [
{
name: 'Joe',
email: 'joemail'
},
{
name: 'Bill',
email: 'billmail'
},
{
name: 'Dude',
email: 'dudemail'
}
]
class FormContact extends Component {
constructor(props) {
super(props)
this.state = {
formValues: {
name: '',
email: ''
}
}
}
handleChange(event) {
let formValues = this.state.formValues;
let name = event.target.name;
let value = event.target.value;
formValues[name] = value;
this.setState({
formValues
});
}
handleSubmit(event) {
event.preventDefault();
console.log("NEW FORM VALUES " + this.state.formValues.name + " " + this.state.formValues.email);
const {name, email} = this.state.formValues
this.props.addContact({name, email});
}
render() {
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<label> Name:
<input type="text" name="name" placeholder="Name" value={this.state.formValues["name"]} onChange={this.handleChange.bind(this)} />
</label><br />
<label> Email:
<input type="text" name="email" placeholder="Email" value={this.state.formValues["email"]} onChange={this.handleChange.bind(this)}/>
</label><br />
<input className="btn btn-primary" type="submit" value="Submit" />
</form>
)
}
}
FormContact.PropTypes = {
data: PropTypes.arrayOf(
PropTypes.object
)
}
FormContact.defaultProps = {
data: testData
}
class Contact extends Component {
constructor(props) {
super(props)
this.state = {
data: testData
}
}
addContact(contact) {
this.setState({data: this.state.data.concat(contact)});
}
render() {
const renObjData = this.props.data.map((anObjectMapped, index) => {
return (<p key={index}>
Name: {anObjectMapped.name} < br/>
Email: {anObjectMapped.email} <br /></p>
)
});
return (
<div>
<h1>CONTACT PAGE</h1>
<FormContact data={this.state.data} addContact={this.addContact.bind(this)} />
{renObjData}
</div>
)
}
}
Contact.PropTypes = {
data: PropTypes.arrayOf(
PropTypes.object
)
}
Contact.defaultProps = {
data: testData
}
export default Contact;
данных, как представляется, не определено в этом \t this.setState ({данные: this.state.data.concat (контакт)}); – user3622460
должен был добавить this.addContact.bind (это), и теперь он правильно указывает данные. Теперь он добавляет данные в мой массив объектов, но не обновляет значение печати на экране - отображаются только первые 3 контакта, а не какие-либо новые, которые я добавляю – user3622460
. Можете ли вы обновить сообщение с помощью новейшего кода, чтобы он мог заглянуть – finalfreq