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à ref
dell'attributo current
verrà assegnata al componente di riferimento / elemento DOM e assegnata a null
quando 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 ref
callback con l'elemento DOM e lo chiamerà null
quando verrà smontato. Quindi, ad esempio, puoi accedervi semplicemente usando this.stepInput
.
Definendo il ref
callback 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' ref
attributo è 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.
refs
attributo class saranno deprecati nelle prossime versioni di React.