Réagir passage de paramètre par événement onclick l'aide ES6 syntaxe
Comment passer des paramètres supplémentaires pour un événement onClick l'aide de l'ES6 syntaxe?
Par exemple:
handleRemove = (e) => {
}
render() {
<button onClick={this.handleRemove}></button>
}
Je veux passer un id à la handleRemove
fonction comme ceci:
<button onClick={this.handleRemove(id)}></button>
- découvrez cet exemple Passage de paramètres à la flèche en fonction de réagir js
Vous devez vous connecter pour publier un commentaire.
Rappelez-vous que dans
onClick={ ... }
, le...
est une expression JavaScript. Doncest le même que
En d'autres termes, vous appelez
this.handleRemove(id)
immédiatement, et de transmettre cette valeur àonClick
, ce qui n'est pas ce que vous voulez.Au lieu de cela, vous voulez créer un nouveau fonction avec l'un des arguments déjà préremplie; essentiellement, vous voulez les suivantes:
Il y a une façon de l'exprimer dans l'ES5 JavaScript:
Function.le prototype.bind
.Si vous utilisez
React.createClass
, Réagir lie automatiquementthis
pour vous sur des méthodes d'instance, et il peut se plaindre, sauf si vous la changez pourthis.handleRemove.bind(null, id)
.Vous pouvez également définir la fonction inline; cela est plus courte avec flèche fonctions si votre environnement ou transpiler les prend en charge:
Si vous avez besoin de l'accès à l'événement, il vous suffit de le passer:
this._deleteText(result.text)
, et quand ma table chargés, chaque ligne de la table avec un bouton supprimer tiré supprimer des appels... aïe!Utiliser le la valeur de l'attribut de l'élément de bouton pour transmettre l'id, comme
puis dans handleRemove, la lecture de la valeur de l'événement comme:
De cette façon, vous éviter de créer une nouvelle fonction (lorsque comparé à l'utilisation d'une flèche fonction) à chaque fois que ce composant est un nouveau rendu.
event.currentTarget.value
au lieu deevent.target.value
et tout est bon.Uncaught TypeError: Cannot read property 'handleRemove' of undefined
. Et c'est même après avoir faitthis.handleRemove = this.handleRemove.bind(this);
en haut de monconstructor(props)
.De Flèche de la fonction comme ceci:
JSX functions should not use arrow functions react/jsx-no-bind
JSX props should not use .bind() react/jsx-no-bind
Quelque chose que personne n'a évoqué jusqu'à présent est de faire handleRemove de retour d'une fonction.
Vous pouvez faire quelque chose comme:
Cependant, toutes ces solutions ont l'inconvénient de créer une nouvelle fonction sur chaque rendu. Mieux pour créer un nouveau composant pour le Bouton qui reçoit le
id
et lahandleRemove
séparément.id
etevent
et exerce les fonctions dehandleRemove()
. Pas sûr de ce que le problème que vous avez avec elle est? Avez-vous rencontré des problèmes de mise en oeuvre? "Quoi qu'il en retourne" est celle-ci la fonction de l'accès àid
etevent
.TL;DR:
N'engagent pas la fonction (ni de flèche fonctions) à l'intérieur de méthode render. Voir les recommandations officielles.
https://reactjs.org/docs/faq-functions.html
Donc, il y aura accepté de répondre et un couple de plus que des points de la même. Et il y a aussi quelques commentaires empêcher les gens d'utiliser
bind
dans la méthode render, et aussi pour éviter la flèche fonctions là pour la même raison (ces fonctions sera créé une fois encore et encore à chaque rendu). Mais il n'y a pas d'exemple, je suis donc en écrire un.Fondamentalement, vous devez lier vos fonctions dans le constructeur.
Principaux axes sont:
constructeur
this.onReplace = this.onReplace.bind(this);
méthode
rendre
'PropTypes' is not defined
. Il vous manque quelque chose.import PropTypes from 'prop-types'
J'utilise le code suivant:
Puis à l'intérieur de la méthode:
Comme un résultat:
Je suis à l'aide de Réagir-Bootstrap. Le onSelect de déclenchement pour les listes déroulantes n'étaient pas en me permettant de passer des données. Seulement l'événement. Donc n'oubliez pas, vous pouvez simplement mettre toutes les valeurs d'attributs et de les ramasser à partir de la fonction à l'aide de javascript. Ramasser ces attributs que vous avez définis dans ce cas cible.