2017-03-06 2 views
0

C'est une douleur de travailler avec react.js quand il s'agit de la forme. J'étais angulaire, à cause de 2 façons de lier les choses, c'est rapide d'intégrer les choses. Mais quand je réagis, j'avoue que je suis perdu.Envoi de grandes formes avec rea.js

dit que c'est un profil d'utilisateur, je suis arrivé ces données de l'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" 
}; 

sur l'interface utilisateur que j'ai text input, textarea, checkbox et select.

Comment le gérer lorsque l'utilisateur clique sur Enregistrer? Dois-je lier tous les éléments d'entrée avec onChange? comme handleNameChange, handleAgeChange, handleSkillsChange .. omg c'est ridicule.

Alors ref est venu dans mon esprit, facile, il suffit de faire ref="name" et je peux l'obtenir par ReactDOM.findDOMNode(this.refs.name).value, mais attendez, il ne fonctionne pas sur <select>, il est mauvais parfois j'utiliser ref, parfois je vais avec la fonction de poignée.

Les gars, j'ai sérieusement besoin d'aide!

+1

Je ne suis pas sûr de comprendre la question. Pourquoi avez-vous besoin de lier des fonctions de changement si tout ce qui vous intéresse est de soumettre? Essayez-vous de soumettre chaque fois que la valeur d'un formulaire change? –

+0

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

+0

Si vous ne souhaitez pas lier un événement sur chaque élément de formulaire (vous pouvez réutiliser le même fonction rappelez-vous donc ce n'est pas si ridicule) vous pouvez utiliser la forme Redux. – spirift

Répondre

0

Voici un exemple de réutilisation d'un gestionnaire d'événements et de ramasser les différences de l'événement. Voir en action au 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

Si vous avez seulement besoin d'extraire des valeurs de formulaire, vous pouvez utiliser form-serialize - il est disponible en tant que package via npm.

Dans votre composant, ajoutez un soumettre événement à votre formulaire:

<form onSubmit={this.handleSubmit}> 

Votre gestionnaire extrait la forme comme ceci:

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

puis-je avoir le lien pour le paquet? Je n'utilise pas jquery. –

+0

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

+0

@DaveNewton est-ce pour jquery? –