Por que não consigo acessar os métodos do componente de "fora" no ReactJS? Por que não é possível e existe alguma maneira de resolvê-lo?
Considere o 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
user1518183
fonte
fonte
Pubsub
?Respostas:
Reagir fornece uma interface para o que você está tentando fazer através do
ref
atributo . Atribua um componente aref
e seucurrent
atributo será seu componente personalizado:Nota : Isso funcionará apenas se o componente filho for declarado como uma classe, conforme a documentação encontrada aqui: https://facebook.github.io/react/docs/refs-and-the-dom.html#adding-a- ref-para-um-classe-componente
Atualização 2019-04-01: Exemplo alterado para usar uma classe e pelos
createRef
documentos mais recentes do React.Atualização 19/09/2016: Exemplo alterado para usar o retorno de chamada ref por orientação nos
ref
documentos do atributo String .fonte
props
e será renderizado adequadamente.{(child) => this._child = child}
criaria uma função que sempre retornavatrue
, mas esse valor não é usado peloref
atributo do React .Se você quiser chamar funções em componentes de fora do React, poderá chamá-las no valor de retorno de renderComponent:
A única maneira de obter um identificador para uma instância do React Component fora do React é armazenando o valor de retorno React.renderComponent. Fonte .
fonte
Como alternativa, se o método em Child for realmente estático (não um produto dos adereços atuais, estado), você poderá defini-lo
statics
e acessá-lo como faria com um método de classe estática. Por exemplo:fonte
A partir do React 16.3
React.createRef
pode ser usado (useref.current
para acessar)fonte
Desde o React 0.12, a API foi ligeiramente alterada . O código válido para inicializar myChild seria o seguinte:
fonte
Você também pode fazer assim, sem ter certeza se é um bom plano: D
fonte
Conforme mencionado em alguns dos comentários,
ReactDOM.render
não retorna mais a instância do componente. Você pode passar umref
retorno de chamada ao renderizar a raiz do componente para obter a instância, assim:e:
fonte
Outra maneira tão fácil:
função fora:
Vincule-o:
Por favor, veja o tutorial completo aqui: Como usar "isto" de um Componente React de fora?
fonte