Wie man Formular-Daten aus input-Feldern in Reagieren
Konstruktor-Funktion:
constructor(props) {
super(props);
this.state = {
tagline: 'We rank what people are talking about.',
year: new Date().getFullYear()
};
this.onFormSubmit = this.onFormSubmit.bind(this);
}
onFormSubmit(e) {
console.log('onFormSubmit', e)
console.log('this.state', this.state);
};
Form (Klassennamen zur Klarheit weggelassen):
<form onSubmit={ this.onFormSubmit }>
<div className="fl w100">
<div>
<input type="text" id="email" value={ this.state.email }/>
<label htmlFor="email">Email</label>
</div>
</div>
<div className="fl w100">
<div>
<input type="password" id="password" value={ this.state.password }/>
<label htmlFor="password">Password</label>
</div>
</div>
<button type="submit">
Login
</button>
</form>
Dies ist, was sich ausloggt, Hinweis: keine E-Mail-oder Passwort-Informationen:
Kompletten Login-Komponente code
import React from 'react';
class Login extends React.Component {
constructor(props) {
super(props);
this.state = {
tagline: 'We rank what people are talking about.',
year: new Date().getFullYear()
};
this.onFormSubmit = this.onFormSubmit.bind(this);
}
onFormSubmit(e) {
console.log('onFormSubmit', e)
console.log('this.state', this.state);
};
render() {
return (<div className="app">
<div className="welcome">
<header>
<div className="wikitags-logo">
<img src="imgs/wikitags-logo.png"/>
</div>
<h2>Admin Portal</h2>
<p>{ this.state.tagline }</p>
</header>
<section className="login-form">
<form onSubmit={ this.onFormSubmit }>
<div className="fl w100">
<div className="mdl-textfield mdl-js-textfield">
<input className="mdl-textfield__input" type="text" id="email" value={ this.state.email }/>
<label className="mdl-textfield__label" htmlFor="email">Email</label>
</div>
</div>
<div className="fl w100">
<div className="mdl-textfield mdl-js-textfield">
<input className="mdl-textfield__input" type="password" id="password" value={ this.state.password }/>
<label className="mdl-textfield__label" htmlFor="password">Password</label>
</div>
</div>
<button type="submit" className="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
Login
</button>
</form>
</section>
<footer>
© { this.state.year } WikiTags
</footer>
</div>
</div>);
}
}
export default Login;
InformationsquelleAutor Leon Gaban | 2017-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorschläge:
1. Sie sind mithilfe der value-Eigenschaft mit input-Feldern, aber Sie hat nicht definiert, die onChange-Methode, so dass die Eingabefelder werden nur-lese -, weil state-Wert wird nicht aktualisiert.
2. Definieren Sie ein onChange-Ereignis werden alle input-Felder oder machen Sie unkontrollierte element durch entfernen der value-Eigenschaft.
3. Im Falle der unkontrollierten element definieren, die ref auf jedes Feld und rufen Sie den Wert verwenden
this.ref_name.value
.Durch die Definition der onChange-Ereignis:
Definieren Sie die name-Eigenschaft für jedes input-element (name muss derselbe sein wie der state-variable-name es wird Ihnen helfen, aktualisieren Sie den Status, und wir können all die Veränderung in einzelnen onChange-Funktion) wie folgt:
Von Uncotrolled element:
Nun im onSubmit-Funktion verwenden
this.el.value
zugreifen, er Werte dieses Eingabefeld.Überprüfen Sie diese Antwort für Referenz: https://stackoverflow.com/a/43695213/5185595
InformationsquelleAutor Mayank Shukla
Werden Sie nicht bekommen E-Mail-oder Passwort-Informationen, weil Sie vorbei sind in dem Zustand
console.log('this.state', this.state);
und Sie haben nicht einen Staat für die E-Mail und Passwort.Nun, du hast zwei Optionen:
Für option 1, müssen Sie einen Status für Ihre E-Mail und Passwort (obwohl das einstellen eines Staates für ein Passwort wird nicht empfohlen) und ein
onChange
event-handler auf den Eingang(s).Richten Sie Ihre
onChange
event-Handler.Und die Funktionen festlegen, die
email
undpassword
Staaten.Und nicht vergessen, initialisieren Sie den Staat für Ihre
email
undpassword
im Konstruktor, und binden Sie die Funktionen.Fertig! Dann auf die
onFormSubmit
Funktion nur Zugriff auf dieemail
undpassword
Werte vom Staatthis.state.email
undthis.state.password
und tun, was Sie möchten.Nun für option 2, Sie kann nur passieren in der
event.target.value
der Eingänge, das sind die Werte für die E-Mail und das Kennwort ein, und geben diese Werte an ein Formular-Ereignis-handleronSubmit
Funktion, von dort aus können Sie tun was Sie wollen (der Staat oder aktualisieren Sie die E-Mail und Passwort, zu ändern, was auch immer).Und die
onFormSubmit
Funktion.Die einfachere und empfohlene Weg, das zu erreichen, was Sie zu tun versuchen, ist die option 2.
Denken Sie daran, die weniger Staat Ihre app verarbeitet, desto besser.
Oh wow, tolle Erklärung zu 2. Speziell für dieses login-Formular.
InformationsquelleAutor bntzio
So, wie würde ich diesen Ansatz ist um die Werte zu speichern, die in Ihrem Staat über eine sogenannte controlled-Komponente. Herstellung eines controlled-Komponente ist sehr einfach, dies ist eine grundlegende Implementierung:
Der Schlüssel ist hier die
handleChange
Funktion, und dieonChange
Attribut. Jedes mal, wenn sich das Eingabefeld ändert, diehandleChange
- Funktion aufgerufen werden und der Zustand aktualisiert wird.Finden Sie mehr Infos form der Dokumentation hier: https://facebook.github.io/react/docs/forms.html
InformationsquelleAutor Nitsew