Antes de entrar em detalhes sobre como você pode acessar o estado de um componente filho, leia a resposta de Markus-ipse sobre uma solução melhor para lidar com esse cenário específico.
Se você realmente deseja acessar o estado dos filhos de um componente, pode atribuir uma propriedade chamada ref
a cada filho. Agora, existem duas maneiras de implementar referências: Usando React.createRef()
e referências de retorno de chamada.
Usando React.createRef()
Atualmente, é a maneira recomendada de usar referências a partir do React 16.3 (consulte a documentação para obter mais informações). Se você estiver usando uma versão anterior, veja abaixo as referências de retorno de chamada.
Você precisará criar uma nova referência no construtor do componente pai e depois atribuí-la a um filho por meio do ref
atributo
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
Para acessar esse tipo de referência, você precisará usar:
const currentFieldEditor1 = this.FieldEditor1.current;
Isso retornará uma instância do componente montado para que você possa usar currentFieldEditor1.state
para acessar o estado.
Apenas uma observação rápida para dizer que, se você usar essas referências em um nó DOM em vez de em um componente (por exemplo <div ref={this.divRef} />
), this.divRef.current
retornará o elemento DOM subjacente em vez de uma instância de componente.
Referências de retorno de chamada
Essa propriedade utiliza uma função de retorno de chamada que recebe uma referência ao componente conectado. Esse retorno de chamada é executado imediatamente após o componente ser montado ou desmontado.
Por exemplo:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
Nestes exemplos, a referência é armazenada no componente pai. Para chamar esse componente no seu código, você pode usar:
this.fieldEditor1
e depois use this.fieldEditor1.state
para obter o estado.
Uma coisa a observar, verifique se o componente filho foi renderizado antes de tentar acessá-lo ^ _ ^
Como acima, se você usar essas referências em um nó DOM em vez de em um componente (por exemplo <div ref={(divRef) => {this.myDiv = divRef;}} />
), this.divRef
retornará o elemento DOM subjacente em vez de uma instância do componente.
Outras informações
Se você quiser ler mais sobre a propriedade ref do React, confira esta página no Facebook.
Leia a seção "Não use demais referências ", que diz que você não deve usar a criança state
para "fazer as coisas acontecerem".
Espero que isso ajude ^ _ ^
Edit: Adicionado React.createRef()
método para criar refs. Código ES5 removido.