Se stai usando React 16.3+, sta usando il modo suggerito per creare riferimenti React.createRef().
class TestApp extends React.Component<AppProps, AppState> {
private stepInput: React.RefObject<HTMLInputElement>;
constructor(props) {
super(props);
this.stepInput = React.createRef();
}
render() {
return <input type="text" ref={this.stepInput} />;
}
}
Quando il componente viene montato, la proprietà refdell'attributo currentverrà assegnata al componente di riferimento / elemento DOM e assegnata a nullquando verrà smontata. Quindi, ad esempio, puoi accedervi usandothis.stepInput.current .
Per ulteriori informazioni RefObject, vedere la risposta di @ apieceofbart o il PR è createRef() stato aggiunto.
Se stai usando una versione precedente di React (<16.3) o hai bisogno di un controllo più approfondito quando i ref sono impostati e non impostati, puoi usare i "ref call refs" .
class TestApp extends React.Component<AppProps, AppState> {
private stepInput: HTMLInputElement;
constructor(props) {
super(props);
this.stepInput = null;
this.setStepInputRef = element => {
this.stepInput = element;
};
}
render() {
return <input type="text" ref={this.setStepInputRef} />
}
}
Quando il componente viene montato, React chiamerà il refcallback con l'elemento DOM e lo chiamerà nullquando verrà smontato. Quindi, ad esempio, puoi accedervi semplicemente usando this.stepInput.
Definendo il refcallback come metodo associato sulla classe anziché una funzione inline (come in una versione precedente di questa risposta), è possibile evitare che il callback venga chiamato due volte durante gli aggiornamenti.
Ci deve essere utilizzato un'API in cui l' refattributo è una stringa (vedi risposta di Akshar Patel ), ma a causa di alcuni problemi , arbitri stringa sono fortemente scoraggiati e verranno rimossi.
Modificato il 22 maggio 2018 per aggiungere il nuovo modo di fare riferimento in React 16.3. Grazie @apieceofbart per aver sottolineato che c'era un nuovo modo.
refsattributo class saranno deprecati nelle prossime versioni di React.