ReactJS: onClick gestionnaire qui ne se déclenche pas lorsqu'il est placé sur un composant enfant
J'ai récemment commencé à travailler avec ReactJS
. Plus précisément, je suis en utilisant le react-rails
ruby gem et react-bootstrap
composants.
J'ai une question concernant placer onClick
des écouteurs d'événement dans les composants enfants.
Comme vous pouvez le voir dans l'exemple de code ci-dessous, j'ai un composant parent qui "appelle" un composant enfant dans ses render
fonction. Dans ce render
fonction, j'ai pu Réagir onClick
auditeur qui appelle handleToggle
lorsqu'il est cliqué.
###* @jsx React.DOM ###
ToggleIconButton = React.createClass
getInitialState: ->
toggleOn: false
handleToggle: (evt) ->
this.setState(toggleOn: !this.state.toggleOn)
render: ->
`<IconButton onClick={this.handleToggle}>Toggle Button</IconButton>`
IconButton = React.createClass
render: ->
# BsButton and BsGlyphicon are React-Bootstrap components
`<BsButton>
<BsGlyphicon glyph={this.props.glyph} />
{" " + this.props.text}
</BsButton>`
Malheureusement, cela ne fonctionne pas de la façon que je l'aurais cru. ToggleIconButton::handleToggle
n'est jamais appelé. Au lieu de cela, le onClick
écouteur est placé sur IconButton
et références ToggleIconButton::handleToggle
.
Je ne veux pas ajouter de comportement à IconButton
. La façon dont je le vois, pas de logique conditionnelle doit être placé dans IconButton
. Tout cela doit faire est de représenter une icône et d'un bouton et de ne pas avoir à vous soucier de tout type de navigateur d'événements. C'est ce que ToggleIconButton
est pour.
Alors que je sais que je pourrais envelopper un React Div
autour de IconButton
et d'écrire un onClick
auditeur (j'ai essayé et ça marche), il semble que c'est un peu janky.
Quelqu'un connais un bon moyen de faire cela? Merci les gars!
- double de peut-on associer des gestionnaires de clic pour enfant personnalisé composants
- il y a une différence subtile pour
<ActualJSXChildComponents />
qui fait les réponses ici la peine de lire
Vous devez vous connecter pour publier un commentaire.
Donc, la bonne façon de gérer le concours complet dans ce cas serait de passer le gestionnaire d'événement vers le bas pour le composant enfant. Il ya quelques façons d'accomplir ce que vous voulez, et je pourrais implémenter ce comportement différemment (pas sûr de ce que le cas d'utilisation), mais j'ai câblé un exemple dans JSX pour vous qui démontre l'événement typique de la manipulation entre le Parent et l'Enfant Composants. Vous pouvez le trouver ici...
JS Fiddle
Il suffit de penser de cette façon:
onClick
auditeur qui va appeler une fonction de l'enfantprops
, il me semble que je ne devrais pas avoir à le faire... si le composant enfant ne doit pas nécessairement avoir un onClick auditeur dans d'autres contextes? Que faire si je veux utiliser ce composant dans un autre composant parent, mais pas un onClick auditeur? N'est-il pas de nuire à la réutilisation d'un composant? Laissez-moi savoir si ce n'est pas logique.Vous n'avez pas besoin de faire un composant enfant si avant d'appeler le nœud de vous créer un var pour référence le rendu de ce savoir
Ainsi, par exemple (ce qui est artificiel et le var, l'auto n'est pas nécessaire dans ce cas, mais dans le cas de imbriquée retour des déclarations, il serait nécessaire).
Mieux encore, vous pouvez lier cela à la fonction.
Ou de suivre captray de la suggestion dans les commentaires