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 ref
del atributo current
se asignará al componente de referencia / elemento DOM y se asignará nuevamente null
cuando 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 ref
devolución de llamada con el elemento DOM y lo llamará null
cuando se desmonte. Entonces, por ejemplo, puede acceder simplemente usando this.stepInput
.
Al definir la ref
devolució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 ref
atributo 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.
refs
atributo de clase quedarán obsoletos en las próximas versiones de React.