J'ai une forme simple dans ma render
fonction, comme ceci:
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 ?
}
Que dois-je écrire dans mon handleLogin: function() { ... }
accès Email
et mes Password
champs?
javascript
html
reactjs
frontend
myusuf
la source
la source
onSubmit
le formulaire plutôt que le clic sur le bouton - de cette façon, vous gérerez également l'utilisateur soumettant le formulaire en appuyant sur Entrée.<form>
avec un<button>
ou<input>
avectype=submit
sera envoyé lorsque l'utilisateur appuie sur Entrée dans l'un des formulaires<input type=text>
. Si vous vousonClick
appuyez sur un bouton, l'utilisateur doit cliquer sur le bouton ou le mettre au point et appuyer sur Entrée / Barre d'espace. L'utilisationonSubmit
activera les deux cas d'utilisation. Lorsque les formulaires ne prennent pas en charge Enter pour l'envoi, ils peuvent se sentir cassés.Réponses:
Utilisez les
change
événements sur les entrées pour mettre à jour l'état du composant et y accéder danshandleLogin
:Violon de travail .
Aussi, lisez la documentation, il y a toute une section dédiée à la gestion des formulaires : Formulaires
Auparavant, vous pouviez également utiliser le mixeur d'assistance de liaison de données bidirectionnel de React pour obtenir la même chose, mais maintenant il est déconseillé de définir la valeur et de modifier le gestionnaire (comme ci-dessus):
La documentation est ici: Assistants de liaison bidirectionnelle .
la source
valueLink
, votre premier exemple doit définir lesvalue
éléments d'entrée. Sans cela, les valeurs sont "incontrôlées" en termes de React.<input ... value={this.state.password}>
.Il y a quelques façons de le faire:
1) Récupérer les valeurs d'un tableau d'éléments de formulaire par index
2) Utilisation de l' attribut name en html
3) Utilisation des références
Exemple complet
la source
Une autre approche consiste à utiliser l'
ref
attribut et à référencer les valeurs avecthis.refs
. Voici un exemple simple:Plus d'informations peuvent être trouvées dans les documents React: https://facebook.github.io/react/docs/more-about-refs.html#the-ref-string-attribute
Pour un grand nombre des raisons décrites dans Comment utiliser les boutons radio dans React? cette approche n'est pas toujours la meilleure, mais elle présente une alternative utile dans certains cas simples.
la source
Un moyen simple de gérer les arbitres:
la source
Object.keys()
suivismap()
comme ceci:Object.keys(this.refs).map(field => formData[field] = this.refs[field].value)
<input type="text" ref={(input) => { this.textInput = input; }} />
Pour compléter la réponse de Michael Schock:
Voir cet article moyen: Comment gérer les formulaires avec Just React
Cette méthode obtient les données du formulaire uniquement lorsque vous appuyez sur le bouton Soumettre. IMO beaucoup plus propre!
la source
Vous pouvez basculer le
onClick
gestionnaire d'événements du bouton sur unonSubmit
gestionnaire du formulaire:Ensuite, vous pouvez utiliser
FormData
pour analyser le formulaire (et construire un objet JSON à partir de ses entrées si vous le souhaitez).la source
Je suggérerais l'approche suivante:
la source
Si toutes vos entrées / textarea ont un nom, vous pouvez filtrer tout depuis event.target:
Forme totalement incontrôlée 😊 sans méthodes onChange, value, defaultValue ...
la source
Pour ceux qui ne veulent pas utiliser ref et réinitialiser l'état avec
OnChange
événement, vous pouvez simplement utiliser une poignée OnSubmit simple et parcourir l'FormData
objet. Cet exemple utilise React Hooks:la source
En outre, cela peut également être utilisé.
la source
Donnez vos références ref comme ceci
alors vous pouvez y accéder dans votre poignée
la source
Exemple plus clair avec la destruction d'es6
la source
Si vous utilisez Redux dans votre projet, vous pouvez envisager d'utiliser ce composant d'ordre supérieur https://github.com/erikras/redux-form .
la source
Dans de nombreux événements en javascript, nous avons
event
qui donnent un objet comprenant quel événement s'est passé et quelles sont les valeurs, etc ...C'est ce que nous utilisons également avec les formulaires dans ReactJs ...
Donc, dans votre code, vous définissez l'état sur la nouvelle valeur ... quelque chose comme ceci:
Voici également l'exemple de formulaire dans React v.16, tout comme la référence pour le formulaire que vous créerez à l'avenir:
la source
J'utilise comme ceci en utilisant l'état du composant React:
la source
Image de sortie jointe ici
la source
Cela pourrait aider les utilisateurs de Meteor (v1.3):
la source
Pour améliorer l'expérience utilisateur; lorsque l'utilisateur clique sur le bouton envoyer, vous pouvez essayer d'obtenir le formulaire pour afficher d'abord un message d'envoi. Une fois que nous avons reçu une réponse du serveur, il peut mettre à jour le message en conséquence. Nous y parvenons dans React en enchaînant les statuts. Voir codepen ou extraits ci-dessous:
La méthode suivante effectue le premier changement d'état:
Dès que React affiche le message d'envoi ci-dessus à l'écran, il appelle la méthode qui enverra les données du formulaire au serveur: this.sendFormData (). Pour plus de simplicité, j'ai ajouté un setTimeout pour imiter cela.
Dans React, la méthode this.setState () rend un composant avec de nouvelles propriétés. Vous pouvez donc également ajouter un peu de logique dans la méthode render () du composant de formulaire qui se comportera différemment selon le type de réponse que nous recevons du serveur. Par exemple:
codepen
la source
Si vous avez plusieurs occurrences d'un nom d'élément, vous devez utiliser forEach ().
html
js
Notez que le dels dans ce cas est un RadioNodeList, pas un tableau, et n'est pas un Iterable. ForEach () est une méthode intégrée de la classe list. Vous ne pourrez pas utiliser ici une carte () ou réduire ().
la source