Appena prima di entrare nei dettagli su come è possibile accedere allo stato di un componente figlio, assicurarsi di leggere la risposta di Markus-ipse in merito a una soluzione migliore per gestire questo particolare scenario.
Se desideri davvero accedere allo stato dei figli di un componente, puoi assegnare una proprietà chiamata ref
a ciascun figlio. Esistono ora due modi per implementare i riferimenti: usare React.createRef()
e richiamare i riferimenti.
utilizzando React.createRef()
Questo è attualmente il modo raccomandato per usare i riferimenti a partire da React 16.3 (Vedi i documenti per maggiori informazioni). Se stai usando una versione precedente, vedi sotto per quanto riguarda i riferimenti di callback.
Dovrai creare un nuovo riferimento nel costruttore del componente principale e quindi assegnarlo a un figlio tramite l' ref
attributo.
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
Per accedere a questo tipo di ref, devi utilizzare:
const currentFieldEditor1 = this.FieldEditor1.current;
Ciò restituirà un'istanza del componente montato in modo da poter quindi utilizzare currentFieldEditor1.state
per accedere allo stato.
Solo una breve nota per dire che se si utilizzano questi riferimenti su un nodo DOM anziché su un componente (ad es. <div ref={this.divRef} />
) this.divRef.current
Si restituirà l'elemento DOM sottostante anziché un'istanza del componente.
Rif. Richiamata
Questa proprietà accetta una funzione di callback a cui viene passato un riferimento al componente collegato. Questo callback viene eseguito immediatamente dopo il montaggio o lo smontaggio del componente.
Per esempio:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
In questi esempi il riferimento è memorizzato sul componente padre. Per chiamare questo componente nel tuo codice, puoi usare:
this.fieldEditor1
e quindi usare this.fieldEditor1.state
per ottenere lo stato.
Una cosa da notare, assicurati che il componente figlio sia stato reso prima di provare ad accedervi ^ _ ^
Come sopra, se si utilizzano questi riferimenti su un nodo DOM anziché su un componente (ad esempio <div ref={(divRef) => {this.myDiv = divRef;}} />
), this.divRef
verrà restituito l'elemento DOM sottostante anziché un'istanza del componente.
Ulteriori informazioni
Se vuoi saperne di più sulla proprietà ref di React, dai un'occhiata a questa pagina da Facebook.
Assicurati di leggere la sezione " Non abusare dei riferimenti " che dice che non dovresti usare quelli del bambino state
per "far accadere le cose".
Spero che questo aiuti ^ _ ^
Modifica: aggiunto React.createRef()
metodo per la creazione di riferimenti. Codice ES5 rimosso.