Avant d'entrer dans les détails sur la façon dont vous pouvez accéder à l'état d'un composant enfant, assurez-vous de lire la réponse de Markus-ipse concernant une meilleure solution pour gérer ce scénario particulier.
Si vous souhaitez en effet accéder à l'état des enfants d'un composant, vous pouvez affecter une propriété appelée ref
à chaque enfant. Il existe maintenant deux façons d'implémenter des références: Utilisation React.createRef()
et références de rappel.
En utilisant React.createRef()
C'est actuellement la manière recommandée d'utiliser les références à partir de React 16.3 (Voir la documentation pour plus d'informations). Si vous utilisez une version antérieure, consultez ci-dessous les références de rappel.
Vous devrez créer une nouvelle référence dans le constructeur de votre composant parent, puis l'affecter à un enfant via l' ref
attribut.
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
Pour accéder à ce type de référence, vous devrez utiliser:
const currentFieldEditor1 = this.FieldEditor1.current;
Cela renverra une instance du composant monté afin que vous puissiez ensuite l'utiliser currentFieldEditor1.state
pour accéder à l'état.
Juste une petite note pour dire que si vous utilisez ces références sur un nœud DOM au lieu d'un composant (par exemple <div ref={this.divRef} />
), alors this.divRef.current
retournera l'élément DOM sous-jacent au lieu d'une instance de composant.
Références de rappel
Cette propriété prend une fonction de rappel qui reçoit une référence au composant attaché. Ce rappel est exécuté immédiatement après le montage ou le démontage du composant.
Par exemple:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
Dans ces exemples, la référence est stockée sur le composant parent. Pour appeler ce composant dans votre code, vous pouvez utiliser:
this.fieldEditor1
puis utilisez this.fieldEditor1.state
pour obtenir l'état.
Une chose à noter, assurez-vous que votre composant enfant est restitué avant d'essayer d'y accéder ^ _ ^
Comme ci-dessus, si vous utilisez ces références sur un nœud DOM au lieu d'un composant (par exemple <div ref={(divRef) => {this.myDiv = divRef;}} />
), alors this.divRef
retournera l'élément DOM sous-jacent au lieu d'une instance de composant.
Plus d'informations
Si vous souhaitez en savoir plus sur la propriété ref de React, consultez cette page sur Facebook.
Assurez-vous de lire la section « Ne pas abuser des références » qui dit que vous ne devez pas utiliser l'enfant state
pour «faire bouger les choses».
J'espère que cela aide ^ _ ^
Modifier: Ajout d'une React.createRef()
méthode pour créer des références. Suppression du code ES5.