2017-03-06 2 views
0

Es ist ein Schmerz, mit react.js zu arbeiten, wenn es um die Form geht. Ich war von eckig, weil es zwei Möglichkeiten gibt, Dinge zu binden, die großartig sind, es ist schnell, Dinge zu integrieren. Aber wenn ich reagiere, gebe ich zu, dass ich verloren bin.Senden von großen Formularen mit react.js

sagt es ein Benutzerprofil ist, ich diese Daten von API

var profile = { 
    name:"Gaila", 
    age:22, 
    skills: [{id:1,name:"react"},{id:1,name:"angular"}], 
    club: [{id:1,name:"dancing"},{id:1,name:"hiking"}], 
    description: "some long string" 
}; 

Ich habe auf der Benutzeroberfläche bekam text input, textarea, checkbox und select.

Wie würde ich damit umgehen, wenn Benutzer zum Speichern geklickt hat? Muss ich jedes einzelne Eingabeelement mit onChange verbinden? wie handleNameChange, handleAgeChange, handleSkillsChange .. omg es ist lächerlich.

So ref kam mir in den Sinn, einfach nur ref="name" tun und ich kann es erhalten, indem ReactDOM.findDOMNode(this.refs.name).value, aber warten, ist es nicht auf <select> funktioniert, dann ist es schlecht irgendwann ich ref verwenden, manchmal gehe ich mit Griff-Funktion.

Jungs, ich brauche ernsthaft, wirklich Hilfe!

+1

Ich bin mir nicht sicher, ob ich die Frage verstehe. Warum müssen Sie Änderungsfunktionen binden, wenn alles, was Ihnen wichtig ist, zu übermitteln ist? Versuchen Sie jedes Mal, wenn sich ein Formularwert ändert, zu senden? –

+0

https://stackoverflow.com/questions/21029999/react-js-identifying-different-inputs-with-one-onchange-handler – paqash

+0

Wenn Sie kein Ereignis an jedes Formularelement binden möchten (Sie könnten das gleiche Funktion erinnern, so ist es nicht so lächerlich) Sie könnten Redux-Formular verwenden. – spirift

Antwort

0

Hier ein Beispiel ist eine Ereignisbehandlungsroutine der Wiederverwendung und Aufnehmen die Unterschiede zum Event. Sehen Sie es in Aktion bei codepen.

const FormFunc =() => { 

    const changeHandler = (e) => { 
    console.log(`e.target.name, name: `, e.target.name, e.target.value) 
    } 
    return (
    <form> 
     <input onChange={changeHandler} type='text' name='firstName' /> 
     <input onChange={changeHandler} type='text' name='surname' /> 
     <input onChange={changeHandler} type='phone' name='phone' /> 
     <input onChange={changeHandler} type='email' name='email' /> 
    </form> 
) 
} 
0

Wenn Sie nur Formularwerte extrahieren müssen, können Sie form-serialize verwenden - es ist als Paket über npm verfügbar.

In Ihrer Komponente, fügen Sie einen einreichen Termin in Ihrem Formular:

<form onSubmit={this.handleSubmit}> 

Der Handler extrahiert die Form etwa so:

handleSubmit = (event) => { 
    event.preventDefault() 
    const values = serializeForm(event.target, { hash: true }) 
    console.log(values) 
} 
+0

kann ich den Link für das Paket haben? Ich benutze keine jQuery. –

+0

@GialaJefferson \t 2s auf Google: https://www.npmjs.com/package/form-serialize –

+0

@DaveNewton ist das für jquery? –

Verwandte Themen