Si está usando React 16.3+, la forma sugerida de crear referencias es usando 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} />;
}
}
Cuando el componente se monta, la propiedad refdel atributo currentse asignará al componente de referencia / elemento DOM y se asignará nuevamente nullcuando se desmonte. Entonces, por ejemplo, puede acceder usando this.stepInput.current.
Para obtener más información RefObject, consulte la respuesta de @ apieceofbart o se agregó el PR createRef() .
Si está utilizando una versión anterior de React (<16.3) o necesita un control más detallado sobre cuándo las referencias están configuradas y no, puede usar "referencias de devolución de llamada" .
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} />
}
}
Cuando se monta el componente, React llamará a la refdevolución de llamada con el elemento DOM y lo llamará nullcuando se desmonte. Entonces, por ejemplo, puede acceder simplemente usando this.stepInput.
Al definir la refdevolución de llamada como un método enlazado en la clase en lugar de una función en línea (como en una versión anterior de esta respuesta), puede evitar que la devolución de llamada se llame dos veces durante las actualizaciones.
No solía ser una API donde el refatributo era una cadena (véase la respuesta de Akshar Patel ), pero debido a algunos problemas , árbitros de cuerdas son totalmente desaconsejada y eventualmente serán eliminados.
Editado el 22 de mayo de 2018 para agregar la nueva forma de hacer referencias en React 16.3. Gracias @apieceofbart por señalar que había una nueva forma.
refsatributo de clase quedarán obsoletos en las próximas versiones de React.