Bevor ich näher darauf eingehe, wie Sie auf den Status einer untergeordneten Komponente zugreifen können, lesen Sie bitte die Antwort von Markus-ipse bezüglich einer besseren Lösung für dieses spezielle Szenario.
Wenn Sie tatsächlich auf den Status der untergeordneten Elemente einer Komponente zugreifen möchten, können Sie refjedem untergeordneten Element eine Eigenschaft zuweisen . Es gibt jetzt zwei Möglichkeiten, Referenzen zu implementieren: Verwenden React.createRef()und Rückrufen von Refs.
Verwenden von React.createRef()
Dies ist derzeit die empfohlene Methode zur Verwendung von Referenzen ab React 16.3 ( weitere Informationen finden Sie in den Dokumenten ). Wenn Sie eine frühere Version verwenden, finden Sie unten Informationen zu Rückrufreferenzen.
Sie müssen im Konstruktor Ihrer übergeordneten Komponente eine neue Referenz erstellen und diese dann über das refAttribut einem untergeordneten Element zuweisen .
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
Um auf diese Art von Referenz zuzugreifen, müssen Sie Folgendes verwenden:
const currentFieldEditor1 = this.FieldEditor1.current;
Dadurch wird eine Instanz der bereitgestellten Komponente zurückgegeben, sodass Sie currentFieldEditor1.stateauf den Status zugreifen können.
Nur eine kurze Anmerkung, um zu sagen, dass, wenn Sie diese Referenzen auf einem DOM-Knoten anstelle einer Komponente (z. B. <div ref={this.divRef} />) verwenden this.divRef.current, das zugrunde liegende DOM-Element anstelle einer Komponenteninstanz zurückgegeben wird.
Rückruf Refs
Diese Eigenschaft übernimmt eine Rückruffunktion, der ein Verweis auf die angehängte Komponente übergeben wird. Dieser Rückruf wird unmittelbar nach dem Ein- oder Aushängen der Komponente ausgeführt.
Beispielsweise:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
In diesen Beispielen wird die Referenz in der übergeordneten Komponente gespeichert. Um diese Komponente in Ihrem Code aufzurufen, können Sie Folgendes verwenden:
this.fieldEditor1
und dann verwenden this.fieldEditor1.state, um den Zustand zu erhalten.
Beachten Sie, dass Ihre untergeordnete Komponente gerendert wurde, bevor Sie versuchen, darauf zuzugreifen ^ _ ^
Wenn Sie diese Referenzen wie oben auf einem DOM-Knoten anstelle einer Komponente (z. B. <div ref={(divRef) => {this.myDiv = divRef;}} />) verwenden, this.divRefwird das zugrunde liegende DOM-Element anstelle einer Komponenteninstanz zurückgegeben.
Weitere Informationen
Wenn Sie mehr über die Ref-Eigenschaft von React erfahren möchten, besuchen Sie diese Seite von Facebook.
Stellen Sie sicher , dass Sie den Abschnitt " Refs nicht überbeanspruchen " lesen, in dem steht, dass Sie die des Kindes nicht verwenden sollten, stateum "Dinge geschehen zu lassen".
Hoffe das hilft ^ _ ^
Bearbeiten: React.createRef()Methode zum Erstellen von Refs hinzugefügt . ES5-Code entfernt.