createRef
crée un objet ref qui peut contenir une valeur quelconque.
class MyInput extends Component {
inputRef = createRef();
// ...
}
Référence
createRef()
Appelez createRef
pour déclarer une ref au sein d’un composant à base de classe.
import { createRef, Component } from 'react';
class MyComponent extends Component {
intervalRef = createRef();
inputRef = createRef();
// ...
Voir d’autres exemples ci-dessous.
Paramètres
createRef
ne prend aucun paramètre.
Valeur renvoyée
createRef
renvoie un objet doté d’une unique propriété :
current
: elle vaut initialementnull
. Vous pourrez ensuite la modifier. Si vous passez l’objet ref à React en tant que propref
d’un nœud JSX, React définira automatiquement sa propriétécurrent
.
Limitations
createRef
renvoie toujours un objet différent. C’est équivalent à écrire{ current: null }
vous-même.- Dans une fonction composant, vous voudrez certainement utiliser plutôt
useRef
, qui renverra toujours le même objet. const ref = useRef(null)
est équivalent àconst [ref, _] = useState(() => createRef())
.
Usage
Déclarer une ref dans un composant à base de classe
Pour déclarer une ref dans un composant à base de classe, appelez createRef
et affectez son résultat à un champ d’instance :
import { Component, createRef } from 'react';
class Form extends Component {
inputRef = createRef();
// ...
}
Si vous passez ensuite ref={this.inputRef}
à un <input>
dans votre JSX, React fera automatiquement pointer this.inputRef.current
sur le nœud DOM du champ. Par exemple, voici comment écrire un bouton qui activera le champ :
import { Component, createRef } from 'react'; export default class Form extends Component { inputRef = createRef(); handleClick = () => { this.inputRef.current.focus(); } render() { return ( <> <input ref={this.inputRef} /> <button onClick={this.handleClick}> Activer le champ </button> </> ); } }
Alternatives
Migrer d’une classe avec createRef
à une fonction avec useRef
Pour tout nouveau code, nous vous conseillons d’utiliser des fonctions composants plutôt que des composants à base de classes. Si vous avez des composants existants à base de classes qui utilisent createRef
, voici comment les convertir. Prenons le code original suivant :
import { Component, createRef } from 'react'; export default class Form extends Component { inputRef = createRef(); handleClick = () => { this.inputRef.current.focus(); } render() { return ( <> <input ref={this.inputRef} /> <button onClick={this.handleClick}> Activer le champ </button> </> ); } }
Lorsque vous convertissez ce composant d’une classe vers une fonction, remplacez les appels à createRef
par des appels à useRef
:
import { useRef } from 'react'; export default function Form() { const inputRef = useRef(null); function handleClick() { inputRef.current.focus(); } return ( <> <input ref={inputRef} /> <button onClick={handleClick}> Activer le champ </button> </> ); }