Si vous utilisez React 16.3+, la méthode suggérée pour créer des références est d'utiliser 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} />;
}
}
Lorsque le composant est monté, la propriété de l' ref
attribut current
sera affectée au composant / élément DOM référencé et null
réattribuée lors de son démontage. Ainsi, par exemple, vous pouvez y accéder en utilisantthis.stepInput.current
.
Pour en savoir plus RefObject
, consultez la réponse de @ apieceofbart ou le PR a createRef()
été ajouté.
Si vous utilisez une version antérieure de React (<16.3) ou avez besoin d'un contrôle plus fin sur le moment où les références sont définies et non définies, vous pouvez utiliser des «références de rappel» .
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} />
}
}
Lorsque le composant est monté, React appellera le ref
rappel avec l'élément DOM, et l'appellera avec null
lors du démontage. Ainsi, par exemple, vous pouvez y accéder simplement en utilisant this.stepInput
.
En définissant le ref
rappel comme une méthode liée sur la classe par opposition à une fonction en ligne (comme dans une version précédente de cette réponse), vous pouvez éviter que le rappel soit appelé deux fois lors des mises à jour.
Il y avait une API où l' ref
attribut était une chaîne (voir la réponse d'Akshar Patel ), mais en raison de certains problèmes , les références de chaîne sont fortement déconseillées et seront éventuellement supprimées.
Édité le 22 mai 2018 pour ajouter la nouvelle façon de faire des refs dans React 16.3. Merci @apieceofbart d'avoir souligné qu'il y avait une nouvelle façon.
refs
attribut de classe seront obsolètes dans les prochaines versions de React.