Pourquoi ne puis-je pas accéder aux méthodes des composants de «l'extérieur» dans ReactJS? Pourquoi n'est-ce pas possible et y a-t-il un moyen de le résoudre?
Considérez le code:
var Parent = React.createClass({
render: function() {
var child = <Child />;
return (
<div>
{child.someMethod()} // expect "bar", got a "not a function" error.
</div>
);
}
});
var Child = React.createClass({
render: function() {
return (
<div>
foo
</div>
);
},
someMethod: function() {
return 'bar';
}
});
React.renderComponent(<Parent />, document.body);
javascript
reactjs
dom
utilisateur1518183
la source
la source
Pubsub
?Réponses:
React fournit une interface pour ce que vous essayez de faire via l'
ref
attribut . Attribuez un composant aref
, et soncurrent
attribut sera votre composant personnalisé:Remarque : cela ne fonctionnera que si le composant enfant est déclaré en tant que classe, selon la documentation trouvée ici: https://facebook.github.io/react/docs/refs-and-the-dom.html#adding-a- ref-to-a-class-component
Mise à jour 2019-04-01: exemple modifié pour utiliser une classe et
createRef
selon les derniers documents React.Mise à jour 19/09/2016: exemple modifié pour utiliser le rappel de référence conformément aux instructions de la
ref
documentation sur l' attribut String .la source
props
et restitué de manière appropriée.{(child) => this._child = child}
créerait une fonction qui retournait toujourstrue
, mais cette valeur n'est pas utilisée par l'ref
attribut de React .Si vous souhaitez appeler des fonctions sur des composants depuis l'extérieur de React, vous pouvez les appeler sur la valeur de retour de renderComponent:
La seule façon d'obtenir un handle vers une instance de React Component en dehors de React est de stocker la valeur de retour de React.renderComponent. Source .
la source
Alternativement, si la méthode sur Child est vraiment statique (pas un produit des accessoires actuels, de l'état), vous pouvez la définir sur
statics
, puis y accéder comme vous le feriez pour une méthode de classe statique. Par exemple:la source
À partir de React 16.3
React.createRef
peut être utilisé, (utiliserref.current
pour accéder)la source
Depuis React 0.12, l'API a été légèrement modifiée . Le code valide pour initialiser myChild serait le suivant:
la source
Vous pouvez aussi le faire comme ceci, sans savoir si c'est un bon plan:
la source
Comme mentionné dans certains des commentaires,
ReactDOM.render
ne renvoie plus l'instance du composant. Vous pouvez passer unref
rappel lors du rendu de la racine du composant pour obtenir l'instance, comme ceci:et:
la source
Une autre façon si simple:
fonction à l'extérieur:
Liez-le:
Veuillez consulter le tutoriel complet ici: Comment utiliser "this" d'un composant React de l'extérieur?
la source