J'ai un composant qui gère une soumission de forum de contact d'un utilisateur. Je veux prendre l'état que l'utilisateur soumet et l'ajouter à mes données d'accessoires. Maintenant tout fonctionne, mais le handleSubmit, je ne sais pas comment prendre l'état et le passer à mon this.data.props pour mettre à jour les données pour inclure le nouvel objet.Réactualiser les accessoires de mise à jour avec des données d'état
Mes données sont un tableau d'objets. L'état prend l'entrée de l'utilisateur et se met à jour automatiquement. Ensuite, je veux prendre l'objet d'état et l'ajouter à mes props.data et ensuite l'afficher sur l'écran.
EDIT: MISE À JOUR Le dernier code
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;
semble être non défini dans ce \t this.setState ({données: this.state.data.concat (contact)}); – user3622460
a dû ajouter this.addContact.bind (this) et maintenant il pointe vers les données correctement. Il est maintenant ajouter des données à mon tableau d'objets, mais ne pas mettre à jour la valeur d'impression sur l'écran - seulement les 3 premiers contacts affichés et pas les nouveaux – user3622460
pouvez-vous mettre à jour votre message avec le plus récent code – finalfreq