¿Por qué no puedo acceder a los métodos de componentes desde "afuera" en ReactJS? ¿Por qué no es posible y hay alguna forma de resolverlo?
Considera el código:
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
usuario1518183
fuente
fuente

Pubsub?Respuestas:
React proporciona una interfaz para lo que está intentando hacer a través del
refatributo . Asigne un componente aref, y sucurrentatributo será su componente personalizado:Nota : Esto solo funcionará si el componente hijo se declara como una clase, según la documentación que se encuentra aquí: https://facebook.github.io/react/docs/refs-and-the-dom.html#adding-a- componente de referencia a clase
Actualización 2019-04-01: Se modificó el ejemplo para usar una clase y los
createRefúltimos documentos de ReactActualización 2016-09-19: Se modificó el ejemplo para usar la devolución de llamada de referencia por guía de los
refdocumentos del atributo String .fuente
propsvolverá a generar de manera apropiada.{(child) => this._child = child}crearía una Función que siempre regresatrue, pero ese valor no es usado por elrefatributo React .Si desea llamar a funciones en componentes desde fuera de React, puede llamarlas al valor de retorno de renderComponent:
La única forma de obtener un identificador para una instancia de React Component fuera de React es almacenando el valor de retorno de React.renderComponent. Fuente .
fuente
Alternativamente, si el método en Child es verdaderamente estático (no es un producto de accesorios actuales, estado), puede definirlo
staticsy luego acceder a él como lo haría con un método de clase estática. Por ejemplo:fuente
A partir de React 16.3
React.createRefse puede usar (usarref.currentpara acceder)fuente
Desde React 0.12, la API ha cambiado ligeramente . El código válido para inicializar myChild sería el siguiente:
fuente
También podría hacerlo así, no estoy seguro si es un buen plan: D
fuente
Como se menciona en algunos de los comentarios,
ReactDOM.renderya no devuelve la instancia del componente. Puede pasar unarefdevolución de llamada al representar la raíz del componente para obtener la instancia, de esta manera:y:
fuente
Otra forma tan fácil:
funcionar afuera:
Atarlo:
Vea el tutorial completo aquí: ¿Cómo usar "esto" de un Componente React desde afuera?
fuente