Ich habe eine einfache Form in meiner render
Funktion, wie folgt:
render : function() {
return (
<form>
<input type="text" name="email" placeholder="Email" />
<input type="password" name="password" placeholder="Password" />
<button type="button" onClick={this.handleLogin}>Login</button>
</form>
);
},
handleLogin: function() {
//How to access email and password here ?
}
Was soll ich in meine handleLogin: function() { ... }
Zugangs- Email
und Password
Felder schreiben ?
javascript
html
reactjs
frontend
myusuf
quelle
quelle
onSubmit
das Formular und nicht den Klick auf die Schaltfläche bearbeiten. Auf diese Weise können Sie auch den Benutzer behandeln, der das Formular durch Drücken der Eingabetaste sendet.<form>
mit einem<button>
oder<input>
mittype=submit
wird gesendet, wenn der Benutzer in einem der Formulare die Eingabetaste drückt<input type=text>
. Wenn Sie sich aufonClick
eine Schaltfläche verlassen, muss der Benutzer auf die Schaltfläche klicken oder sie fokussieren und die Eingabetaste / Leertaste drücken. MitonSubmit
wird beide Anwendungsfälle aktiviert. Wenn Formulare die Eingabe von Enter nicht unterstützen, können sie sich beschädigt fühlen.Antworten:
Verwenden Sie die
change
Ereignisse an den Eingaben, um den Status der Komponente zu aktualisieren und darauf zuzugreifenhandleLogin
:Arbeits Geige .
Lesen Sie auch die Dokumente. Es gibt einen ganzen Abschnitt, der der Formularbearbeitung gewidmet ist: Formulare
Früher konnten Sie auch das Zwei-Wege-Hilfemixin für die Datenbindung von React verwenden, um dasselbe zu erreichen. Jetzt ist es jedoch veraltet, den Wert festzulegen und den Handler zu ändern (wie oben):
Die Dokumentation finden Sie hier: Zweiwege-Bindungshelfer .
quelle
valueLink
, sollte Ihr erstes Beispielvalue
die Eingabeelemente festlegen . Ohne das sind die Werte in Bezug auf die Reaktion "unkontrolliert" .<input ... value={this.state.password}>
.Es gibt einige Möglichkeiten, dies zu tun:
1) Ruft Werte aus dem Array von Formularelementen nach Index ab
2) Mit Namen Attribute in html
3) Verwenden von Refs
Vollständiges Beispiel
quelle
Ein alternativer Ansatz besteht darin, das
ref
Attribut zu verwenden und die Werte mit zu referenzierenthis.refs
. Hier ist ein einfaches Beispiel:Weitere Informationen finden Sie in den React-Dokumenten: https://facebook.github.io/react/docs/more-about-refs.html#the-ref-string-attribute
Aus vielen der unter Wie verwende ich Optionsfelder in React? Dieser Ansatz ist nicht immer der beste, bietet jedoch in einigen einfachen Fällen eine nützliche Alternative.
quelle
Ein einfacher Weg, um mit Refs umzugehen:
quelle
Object.keys()
folgende fürmap()
:Object.keys(this.refs).map(field => formData[field] = this.refs[field].value)
<input type="text" ref={(input) => { this.textInput = input; }} />
Hinzu kommt die Antwort von Michael Schock:
Siehe diesen mittleren Artikel: So behandeln Sie Formulare mit Just React
Diese Methode ruft Formulardaten nur ab, wenn die Schaltfläche Senden gedrückt wird. Viel sauberer IMO!
quelle
Sie können den
onClick
Ereignishandler auf der Schaltfläche auf einenonSubmit
Handler im Formular umstellen :Anschließend können Sie
FormData
das Formular analysieren (und ein JSON-Objekt aus seinen Einträgen erstellen, wenn Sie möchten).quelle
Ich würde den folgenden Ansatz vorschlagen:
quelle
Wenn alle Ihre Eingaben / Textbereiche einen Namen haben, können Sie alle aus event.target filtern:
Völlig unkontrollierte Form 😊 ohne onChange-Methoden, Wert, defaultValue ...
quelle
Für diejenigen, die ref nicht verwenden und den Status mit
OnChange
event zurücksetzen möchten , können Sie einfach das OnSubmit-Handle verwenden und dasFormData
Objekt durchlaufen . In diesem Beispiel werden React Hooks verwendet:quelle
Auch dies kann verwendet werden.
quelle
Geben Sie Ihre Eingaben ref so
dann können Sie wie soo in Ihrem handleLogin darauf zugreifen
quelle
Klareres Beispiel für die Zerstörung von es6
quelle
Wenn Sie Redux in Ihrem Projekt verwenden, können Sie diese Komponente höherer Ordnung https://github.com/erikras/redux-form verwenden .
quelle
In vielen Ereignissen in Javascript haben wir,
event
die ein Objekt angeben, einschließlich welches Ereignis passiert ist und welche Werte usw.Das verwenden wir auch mit Formularen in ReactJs ...
Also setzen Sie in Ihrem Code den Status auf den neuen Wert ... ungefähr so:
Dies ist auch das Formularbeispiel in React v.16, nur als Referenz für das Formular, das Sie in Zukunft erstellen:
quelle
Ich benutze so mit React Component state:
quelle
Ausgabebild hier angehängt
quelle
Dies könnte Meteor (v1.3) -Nutzern helfen:
quelle
Verbesserung der Benutzererfahrung; Wenn der Benutzer auf die Schaltfläche "Senden" klickt, können Sie versuchen, das Formular so zu gestalten, dass zuerst eine sendende Nachricht angezeigt wird. Sobald wir eine Antwort vom Server erhalten haben, kann er die Nachricht entsprechend aktualisieren. Dies erreichen wir in React durch Verketten von Status. Siehe Codepen oder Snippets unten:
Die folgende Methode führt die erste Statusänderung durch:
Sobald React die obige Sending-Nachricht auf dem Bildschirm anzeigt, wird die Methode aufgerufen, mit der die Formulardaten an den Server gesendet werden: this.sendFormData (). Der Einfachheit halber habe ich ein setTimeout hinzugefügt, um dies nachzuahmen.
In React rendert die Methode this.setState () eine Komponente mit neuen Eigenschaften. Sie können also auch eine Logik in der render () -Methode der Formularkomponente hinzufügen, die sich je nach Art der Antwort, die wir vom Server erhalten, unterschiedlich verhält. Zum Beispiel:
Codepen
quelle
Wenn ein Elementname mehrfach vorkommt, müssen Sie forEach () verwenden.
html
js
Beachten Sie, dass die Dels in diesem Fall eine RadioNodeList, kein Array und keine Iterable sind. ForEach () ist eine integrierte Methode der Listenklasse. Sie können hier keine map () oder redu () verwenden.
quelle
UPDATE: Sie können jetzt mit Formik ein externes Paket zum Reagieren verwenden, das den Umgang mit Formularen so einfach macht!
Hier ist der Link, um loszulegen
https://jaredpalmer.com/formik
quelle