Réaction - le Déclenchement d'un composant de méthode à partir d'un autre composant, appartenant tous deux dans le même render()
J'ai un composant personnalisé Foo
, dont le " bar
fonction de je veux de déclenchement de l'extérieur:
class Foo extends React.Component {
bar() { ... }
}
Je me suis rendu Foo
avec un button
dont le but est de déclencher Foo.bar()
:
render() {
return (
<Foo ...>
</Foo>
<Button onClick={I want to trigger Foo.bar()} />
);
}
Choses que j'ai essayé:
- Déplacement
<Button >
à l'intérieur deFoo
, puis en ajoutantonClick
de<Button/>
dansFoo's
constructeur, la liaison de onClick ne fonctionne pas, je vois qu'il est attaché, mais la<Button />
encore ne déclenche pasonClick
. (ou, si cela peut fonctionner, comment le faire correctement)?
Des Solutions qui ne font pas ce que je veux:
-
J'en vois un solution potentielle qui suggère d'écouter un clic dans l'ensemble de la
MyComponent
, puis faire un peu de DOM interrogation de trouver si le bouton a été cliqué. Cela ne fonctionne pas pour moi, cependant, parce queMyComponent
ne pas propre ces boutons (ces boutons ne sont pasMyComponent.props.children
) et je préfère de réfléchir à une solution qui ne me forcer à avoir à déplacer les boutons à l'intérieur. -
Une autre solution possible ne fonctionne pas: je ne peut pas avoir le
render()
retourner la valeur de<MyComponent />
dans unvar myComp
, puis à l'intérieur de<Button onClick={() => {myComp.blah()}} />
, parce que<Button />
lui-même est instancié à l'intérieur de<MyComponent />
comme un enfant! (et, ils sont tous les deux dans le même render() appel de toute façon) -
Partie b) #2 (ci-dessus), à l'aide de Réagir-Composante statique de la méthode de classe, ne fonctionnera pas non plus: j'ai besoin de cette par exemple de base.
-
À l'aide de l'état d'application (comme un magasin) n'est pas ce que je veux, que ce soit --
MyComponent
est destiné à être un re-usaable widget et ne peut pas être lié à une application spécifique de l'état ou de l'écoute de toute magasins spécifiques ou magasin d'actions.
Des suggestions?
Grâce
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir une fonction sur le parent qui a une ref pour le Foo enfant. Cette fonction fera appel de cette.réf.foo.yourFunction(); Vous pouvez alors passer à cette fonction dans le bouton lorsque le bouton est cliqué, la mère de la fonction sera appelée. Ajout d'un exemple ici où cliquant sur le bouton permet de basculer l'état de la Foo composant (mais il pourrait faire n'importe quoi).
Exemple ci-dessous
JS:
HTML: