Réagir la mise à jour de l'état dans les deux champs de saisie du formulaire de soumission
Je suis en train de faire un simple formulaire de contact à l'aide de Réagir. Finalement, je vais envoyer les données recueillies à partir de l'état à une base de données, mais pour l'instant je suis en train de l'obtenir à la console de log les valeurs correctes.
Droit maintenant, le champ e-mail remplace le nom de domaine et quand j'ai du journal de la console, les deux états, le nom et l'email n'est pas défini. Voici mon Réagir Composant
import React, { Component, PropTypes } from 'react';
import ContactData from '../data/ContactData.js';
class FormContact extends Component {
constructor(props) {
super(props)
this.state = {
name: '',
email: '',
textArea: ''
}
}
handleChange(event) {
event.preventDefault();
this.setState({
name: event.target.value,
email: event.target.email
})
}
handleSubmit(event) {
event.preventDefault();
console.log(this.state.name + ' ' + this.state.email);
}
render() {
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<label> Name:
<input type="text" placeholder="Name" value={this.state.name} onChange={this.handleChange.bind(this)} />
</label><br />
<label> Email:
<input type="text" placeholder="Email" value={this.state.email} onChange={this.handleChange.bind(this)}/>
</label><br />
<input className="btn btn-primary" type="submit" value="Submit" />
</form>
)
}
}
FormContact.PropTypes = {
subName: PropTypes.string,
subEmail: PropTypes.string
}
FormContact.defaultProps = {
subName: 'Sam',
subEmail: ''
}
class Contact extends Component {
render() {
return (
<div>
<h1>CONTACT PAGE</h1>
<FormContact />
</div>
)
}
}
export default Contact;
Vous devez vous connecter pour publier un commentaire.
Si je comprends ce que vous voulez, vous pouvez le faire comme suit :
Ajouter un objet vide dans votre état pour les valeurs d'un formulaire
formValues: {}
Ajouter le nom de l'attribut à vos champs
<input name="name" .... />
<input name="email" .... />
ensuite, selon que le nom de la mise à jour de votre état handleChange fonction
Et si les valeurs de descendre à un niveau plus profond, vous pouvez utiliser
value={this.state.formValues["name"]}
au lieu devalue={this.state.name}
- où le nom est la valeur de l'attribut name de votre champ de saisieAinsi, tout doit être comme suit :
Ici est le violon.
Espère que cette aide.
La référence à
event.target.email
n'existe pas sur le cas de l'élément. La valeur d'une saisie de texte à partir d'une ligne-gestionnaire d'événement estevent.target.value
pour les deux e-mail et nom. La solution rapide est de créer un gestionnaire distinct pour chaque entrée:handleChange
méthode pourrait utiliser cette valeur dans la setState de façon dynamique. Une autre option serait de créer une Plus forte Composante de l'Ordre qui encapsule une entrée et efficacement en fait un "idiot" entrée contrôlée.